SQL按顺序排序

Ire*_*ing 61 mysql database sql-order-by

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

ID |  Name  |  Group   

1    Apple     A    

2    Boy       A

3    Cat       B

4    Dog       C

5    Elep      C

6    Fish      C
Run Code Online (Sandbox Code Playgroud)

我希望按照从最小值到最大值的总数来订购,例如:A - 2条记录,B - 1条记录,C - 3条记录,因此它将成为:

3    Cat       B

1    Apple     A    

2    Boy       A

4    Dog       C

5    Elep      C

6    Fish      C
Run Code Online (Sandbox Code Playgroud)

我试过了

    $sql = "SELECT ID,Name FROM table ORDER BY COUNT(Group)";
Run Code Online (Sandbox Code Playgroud)

但它只是为我返回一个结果.

有没有提示?谢谢.

Vin*_*zzi 122

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

SELECT Group, COUNT(*)
FROM table
GROUP BY Group
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)

DESC关键字允许您首先显示最高计数,按默认顺序显示ORDER BY按升序显示最低计数.


xxj*_*jnn 10

...其他答案似乎都没有按照提问者的要求行事。

对于名为“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;
Run Code Online (Sandbox Code Playgroud)

这使:

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
Run Code Online (Sandbox Code Playgroud)


tra*_*per 8

SELECT group, COUNT(*) FROM table GROUP BY group ORDER BY group
Run Code Online (Sandbox Code Playgroud)

或按计数订购

SELECT group, COUNT(*) AS count FROM table GROUP BY group ORDER BY count DESC
Run Code Online (Sandbox Code Playgroud)