使用嵌套查询:
SELECT abc, def
FROM (
SELECT abc, def, COUNT(*) as c
FROM xpto
GROUP BY abc, def
) alias
ORDER BY abc, c DESC
(来自评论)挑战不是按字母顺序排列 abc 而是按具有相同值的条目数排序。我编辑了有问题的示例,以更好地理解最终目标。
好的,那么只需更改 ORDER BY 子句中列的顺序:
SELECT abc, def, c
FROM (
SELECT abc, def, COUNT(*) as c
FROM xpto
GROUP BY abc, def
) alias
ORDER BY c DESC, abc;
上面的查询给出了聚合值(即唯一行 - 每对值一行)。
如果您希望列出按条目数排序的表中的所有行,请尝试以下查询:
SELECT abc, def,
( SELECT COUNT(*) FROM xpto x1
WHERE ( x.abc, x.def ) = (x1.abc, x1.def)
) as c
FROM xpto x
ORDER by c desc, abc
;
此查询显示列 abc、def + count。如果您只想显示 abc + def,而不显示 count 的值,请尝试以下查询:
SELECT abc, def
FROM xpto x
ORDER by ( SELECT COUNT(*) FROM xpto x1
WHERE x.abc = x1.abc AND x.def = x1.def
) desc,
abc
;
查看演示这 3 个查询的sqlfiddle 演示。
注意第二个查询中使用的条件(在依赖子查询中):
WHERE ( x.abc, x.def ) = (x1.abc, x1.def)
此语法与 ANSI SQL 一致,但可能不适用于某些旧版本的 MySQL。在这种情况下,将此条件更改为其等效版本:
WHERE x.abc = x1.abc AND x.def = x1.def