SQL 按计数排序

Posted

技术标签:

【中文标题】SQL 按计数排序【英文标题】:SQL Order By Count 【发布时间】:2012-03-21 16:25:57 【问题描述】:

如果我有这样的表格和数据:

ID |  Name  |  Group   

1    Apple     A    

2    Boy       A

3    Cat       B

4    Dog       C

5    Elep      C

6    Fish      C

我希望按照 Group 的总和从小到大排序,例如: A-2条记录,B-1条记录,C-3条记录,所以会变成:

3    Cat       B

1    Apple     A    

2    Boy       A

4    Dog       C

5    Elep      C

6    Fish      C

我试过了

    $sql = "SELECT ID,Name FROM table ORDER BY COUNT(Group)";

但它只为我返回一个结果。

有什么提示吗?谢谢。

【问题讨论】:

【参考方案1】:

试试:

SELECT count(*),group FROM table GROUP BY group ORDER BY group

按计数降序排序

SELECT count(*),group FROM table GROUP BY group ORDER BY count(*) DESC

这将按返回groupcountgroup 列对结果进行分组,并将返回group order 中的订单

【讨论】:

感谢您的回答,我试过了,但每组返回一个结果?如:猫,B |苹果狗,C。 @IreneLing 我没有在选择语句中包含名称 - 检查它【参考方案2】:

您需要先聚合数据,这可以使用 GROUP BY 子句来完成:

SELECT Group, COUNT(*)
FROM table
GROUP BY Group
ORDER BY COUNT(*) DESC

DESC 关键字允许您首先显示最高计数,默认情况下 ORDER BY 以升序排列,这将首先显示最低计数。

【讨论】:

非常感谢您的回答,但每组只返回一个结果?如:猫,B |苹果狗,C 您是在运行此代码还是其他代码?根据您提供的第一个表,此查询的输出将是:C 3 A 2 B 1 我猜你应该更喜欢使用 count(1) 而不是 count(*)【参考方案3】:
SELECT * FROM table 
group by `Group`
ORDER BY COUNT(Group)

【讨论】:

【参考方案4】:
SELECT group, COUNT(*) FROM table GROUP BY group ORDER BY group

或按数量排序

SELECT group, COUNT(*) AS count FROM table GROUP BY group ORDER BY count DESC

【讨论】:

【参考方案5】:

下面的内容与你所拥有的相反。 (通知组栏目)

SELECT
    *
FROM
    myTable
GROUP BY
    Group_value,
    ID
ORDER BY
    count(Group_value)

让我知道这是否适合你...

我也在努力得到你想要的……

【讨论】:

感谢您的回答,但很抱歉没有给我正确的结果。【参考方案6】:

尝试使用以下查询:

SELECT
    GROUP,
    COUNT(*) AS Total_Count
FROM
    TABLE
GROUP BY
    GROUP
ORDER BY
    Total_Count DESC

【讨论】:

【参考方案7】:

问。列出每个节目的名称,以及它已经举行的不同次数。 首先列出最常举办的节目。

event_id show_id event_name judge_id
0101    01  Dressage        01
0102    01  Jumping         02
0103    01  Led in          01
0201    02  Led in          02
0301    03  Led in          01
0401    04  Dressage        04
0501    05  Dressage        01
0502    05  Flag and Pole   02

回答:

select event_name, count(show_id) as held_times from event 
group by event_name 
order by count(show_id) desc

【讨论】:

【参考方案8】:

...其他答案似乎都没有满足提问者的要求。

对于名为“things”且列“group”的表:

SELECT
  things.*, counter.count
FROM
  things
LEFT JOIN (
  SELECT
    things.group, count(things.group) as count
  FROM
    things
  GROUP BY
    things.group
) counter ON counter.group = things.group
ORDER BY
  counter.count ASC;

给出:

id | name  | group | count 
---------------------------
3  | Cat   | B     | 1
1  | Apple | A     | 2
2  | Boy   | A     | 2
4  | Dog   | C     | 3
5  | Elep  | C     | 3
6  | Fish  | C     | 3

【讨论】:

完美解决问题。

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

SQL:按条件从不同表中按计数排序

SQL - 选择按多个字段分组的前 n 个,按计数排序

数据框:如何在 Scala 中分组/计数然后按计数排序

sql计数和顺序

Cassandra 按计数排序结果

Django 按日期按计数排序