SQL 按组排序

Posted

技术标签:

【中文标题】SQL 按组排序【英文标题】:SQL ORDER BY GROUP 【发布时间】:2019-11-28 19:55:11 【问题描述】:
question category 
A           X
B           Y
C           X
D           X
E           Y

我想从最频繁的类别中输出

question category
A             X
C             X
D             X
B             Y
E             Y

【问题讨论】:

mysql order by before group by的可能重复 【参考方案1】:

您可以尝试加入类别计数

select m.question, m.category  
from my_table  m
inner join  (
  select category, count(*) num
  from my_table  
   group by category 
) t on t.category = m.category
order by t.num desc, m.category, m.question

【讨论】:

【参考方案2】:

如果您运行的是 MySQL 8.0,则可以为此使用窗口函数。这避免了连接的需要。

select *
from mytable
order by 
    count(*) over(partition by category) desc,
    question 

【讨论】:

【参考方案3】:

使用按类别排序。

select * from [table] 按类别排序

【讨论】:

这只会对它们进行排序,但不会将发生次数最多的放在顶部

以上是关于SQL 按组排序的主要内容,如果未能解决你的问题,请参考以下文章

Spark:按组对记录进行排序?

按组对列表排序

Pandas 按组聚合和列排序

按组排序(查询生成器)

Pandas按组内的值分组和排序[重复]

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