按 COUNT 排序结果而不使用 GROUP BY

问题描述 投票:0回答:9

我有一个表格和这样的数据:

ID | Name  | Group
1  | Apple | A
2  | Boy   | A
3  | Cat   | B
4  | Dog   | C
5  | Elep  | C
6  | Fish  | C

我希望按照组中的项目数从小到大排序,例如:B - 1 条记录,A - 2 条记录,C - 3 条记录,所以它会变成:

ID | Name  | Group
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)";

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

如何按照描述订购数据?

sql mysql sql-order-by
9个回答
185
投票

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

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

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


16
投票

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

对于名为“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

13
投票
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

3
投票

尝试:

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

按计数降序排列

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

这将按

group
列对结果进行分组,返回
group
count
,并按
group
顺序返回顺序


2
投票
SELECT * FROM table 
group by `Group`
ORDER BY COUNT(Group)

2
投票

尝试使用以下查询:

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

0
投票

下面给了我与你所拥有的相反的内容。 (公告组栏目)

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

请告诉我您是否同意...

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


0
投票

问。列出每场演出的名称以及举办的不同次数。 首先列出最常举办的演出。

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

0
投票

您可以在

count(*) over ()
子句中
order by

select *
from t
order by count(*) over (partition by `group`)

请注意,没有

group by
,这意味着您可以访问所有行和列。

DB<>Fiddle 上的演示

© www.soinside.com 2019 - 2024. All rights reserved.