gpt4 book ai didi

mysql - mysql中按频率和自定义表达式排序

转载 作者:行者123 更新时间:2023-11-29 22:54:19 25 4
gpt4 key购买 nike

考虑以下 SQL 表:

+------+------+
| kind | name |
+------+------+
| K1 | N1 |
| K2 | N21 |
| K2 | N22 |
| K3 | N31 |
| K3 | N32 |
| K3 | N33 |
| K4 | N4 |
+------+------+

我想显示此表,该表按种类和名称排序,并具有以下该种类的排序要求。 K1 那种应该永远是第一位的。其余种类根据每种名称的数量从最常见到最不常见的种类排序。 IE。结果应排序为:

+------+------+
| K1 | N1 |
| K3 | N31 |
| K3 | N32 |
| K3 | N33 |
| K2 | N21 |
| K2 | N22 |
| K4 | N4 |
+------+------+

此处 K3 紧随 K1,因为它是最常见的类型。为了在 MySQL 下做到这一点,我想出了以下方法:

SELECT
a.kind, a.name
FROM
test a INNER JOIN
(SELECT kind, count(*) AS freq FROM test GROUP BY kind) b
ON a.kind = b.kind
ORDER BY
a.kind <> 'K1', b.freq desc, a.name;

这是一个好方法吗?特别是,使用嵌套选择只是为了影响排序顺序可以吗?

最佳答案

在生产中使用搜索后,结果发现我在建议答案中使用的 SQL 不正确,因为问题也不正确。

问题是,如果两种具有相同的频率,它们的排序顺序将是随机的,甚至可能相互交织。正确的问题应该提到,如果频率匹配,则类型应按字母顺序排序。

此更正问题的答案,包括 Gordon Linoff 的建议是:

 SELECT
a.kind, a.name
FROM
test a INNER JOIN
(SELECT kind, count(*) AS freq FROM test GROUP BY kind) b
ON a.kind = b.kind
ORDER BY
a.kind = 'K1' desc, b.freq desc, a.kind, a.name;

关于mysql - mysql中按频率和自定义表达式排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28782930/

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