79 votes

SQL Order By Count

Si j'ai un tableau et des données comme ceci :

ID |  Name  |  Group   

1    Apple     A    

2    Boy       A

3    Cat       B

4    Dog       C

5    Elep      C

6    Fish      C

et je souhaite les ordonner en fonction du total du groupe, de la plus petite à la plus grande valeur, comme : A - 2 enregistrements , B - 1 enregistrement , C - 3 enregistrements , ainsi cela deviendra :

3    Cat       B

1    Apple     A    

2    Boy       A

4    Dog       C

5    Elep      C

6    Fish      C

J'ai essayé

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

mais il ne renvoie qu'un seul résultat pour moi.

Y a-t-il des indices ? Merci.

158voto

Vince Pergolizzi Points 1453

Vous devez d'abord agréger les données, ce qui peut être fait en utilisant la clause GROUP BY :

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

Le mot-clé DESC vous permet d'afficher le compte le plus élevé en premier, ORDER BY par défaut ordonne par ordre croissant, ce qui afficherait le compte le plus bas en premier.

8voto

trapper Points 3714
SELECT group, COUNT(*) FROM table GROUP BY group ORDER BY group

ou à commander par le compte

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

7voto

ClothSword Points 1559

...aucune des autres réponses ne semble faire ce que le demandeur a demandé.

Pour la table nommée "choses" avec la colonne "groupe" :

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;

ce qui donne :

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

3voto

ManseUK Points 26965

Essayez :

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

to order by count descending do

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

Cela permettra de regrouper les résultats en fonction du group qui renvoie la colonne group et le count et renverra l'ordre dans group commander

2voto

juergen d Points 85039
SELECT * FROM table 
group by `Group`
ORDER BY COUNT(Group)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X