gpt4 book ai didi

mysql - 如何在分组时按最短字符串获取 MySQL 搜索结果?

转载 作者:行者123 更新时间:2023-11-29 09:46:55 25 4
gpt4 key购买 nike

我正在运行一个查询:

SELECT a.* 
FROM a
GROUP BY a.prefixNumber
ORDER BY LENGTH(a.uniqueName) ASC, a.prefixNumber;

两行或多行数据可能包含 ABC-123 形式的相同 prefixNumber,但每个 prefixNumber< 都会有一个唯一的名称。我希望 uniqueName 具有最短的长度,同时仍然能够按 prefixNumber 进行分组。

我猜当我执行GROUP BY子句时会发生一些事情,但我不太确定,因为我的 SQL 技能不是最高的。我一直在四处寻找,找到了 Length(a.uniqueName) 解决方案。这似乎并不能解决我的问题,因为我仍然会得到一些场景的最长名称。

灵魂?

最佳答案

我了解到您希望通过选择具有最短 uniqueName 的记录来删除 prefixNumber 上的重复项。

我会使用NOT EXISTS而不是聚合:

SELECT a1.* 
FROM a a1
WHERE NOT EXISTS (
SELECT 1
FROM a a2
WHERE
a2.prefixNumber = a1.prefixNumber
AND LENGTH(a2.uniqueName) < LENGTH(a1.uniqueName)
)
ORDER BY a1.prefixNumber

NOT EXISTS 条件使用相关子查询来确保不存在具有相同 prefixNumber 和最短 uniqueName 的其他记录。

<小时/>

在MYSQL 8.0中,您可以使用窗口函数,通常效率更高:

SELECT *
FROM (
SELECT
a.*,
ROW_NUMBER() OVER(PARTITION BY prefixNumber ORDER BY LENGTH(uniqueName)) rn
FROM a
) x
WHERE rn = 1

关于mysql - 如何在分组时按最短字符串获取 MySQL 搜索结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55503906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com