web-dev-qa-db-fra.com

SQL Order By Count

Si j'ai une table et des données comme celle-ci:

ID |  Name  |  Group   

1    Apple     A    

2    Boy       A

3    Cat       B

4    Dog       C

5    Elep      C

6    Fish      C

et je souhaite le commander en fonction du total des valeurs du groupe, de la plus petite à la plus grande, telles que: A - 2 enregistrements, B - 1 enregistrements, C - 3 enregistrements.

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 cela ne donne qu'un résultat pour moi.

Y a-t-il des indices? Je vous remercie.

49
Irene Ling

Vous devez d'abord agréger les données. Pour ce faire, utilisez 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 nombre le plus élevé en premier, ORDER BY par défaut, en ordre croissant, ce qui indiquerait le nombre le plus bas en premier.

105
Vince Pergolizzi

Essayez:

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

commander par nombre décroissant do 

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

Cela regroupera les résultats dans la colonne group renvoyant les group et les count et renverra l'ordre dans group

3
ManseUK
SELECT * FROM table 
group by `Group`
ORDER BY COUNT(Group)
2
juergen d
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
2
trapper

... 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;

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
0
xxjjnn

Ci-dessous me donne le contraire de ce que vous avez. (Colonne Groupe d'avis)

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

Faites-moi savoir si cela vous convient ...

J'essaie d'obtenir ce que vous voulez aussi ...

0
Fahim Parkar

Q. Indiquez le nom de chaque émission et le nombre de fois où elle a eu lieu . Indiquez en premier l’émission qui a eu lieu le plus souvent.

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

Ans:

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

Essayez d'utiliser ci-dessous la requête:

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