显示 GROUP BY 的所有单独行,按组的基数排序

Display all individual rows of a GROUP BY, sorted by the cardinality of the groups

给出这样的 table:

User     A
---------------
Erik     1278
Bob      16287
Alice    9723
Daniel   7
Erik     8
Bob      162
Erik     126

如何select所有行,grouped/ordered用户行数最多?

结果将是:

Erik     1278            # Erik is first because 3 rows with him
Erik     8
Erik     126
Bob      16287           # Bob is 2nd because 2 rows
Bob      162
Alice    9723
Daniel   7

都没有

SELECT * FROM t ORDER BY user 

也不

SELECT *, COUNT(1) as frequency FROM t GROUP BY user ORDER BY frequency DESC

有效,实际上后者只为 Erik 显示一行,为 Bob 显示一行,为 ...

显示一行

我似乎需要一个 GROUP BY,但仍然能够看到该组的“每一行”。如何做到这一点?

您可以在 order by:

中使用 window 函数
order by count(*) over (partition by user) desc,
         user

第一个键计算每个用户的行数。第二个让所有用户在一起(如果有联系,这很重要)。如果您想为每个用户的行排序,您可以添加第三个键。

编辑:

在旧版本中,您可以使用子查询:

order by (select count(*) from user u2 where u2.user= u.user) desc,
         user