web-dev-qa-db-fra.com

quelle est la différence entre GROUP BY et ORDER BY en sql

Quand utilisez-vous lequel en général? Les exemples sont fortement encouragés!

Je parle donc de MySQL, mais je ne peux pas imaginer que le concept soit différent d’un autre SGBD

104
vehomzzz

ORDER BY modifie l'ordre dans lequel les articles sont retournés.

GROUP BY regroupera les enregistrements en fonction des colonnes spécifiées, ce qui vous permettra d’exécuter des fonctions d’agrégation sur des colonnes non groupées (telles que SUM, COUNT, AVG, etc.).

74
CMerat

ORDER BY modifie l'ordre dans lequel les articles sont retournés.

GROUP BY regroupera les enregistrements en fonction des colonnes spécifiées, ce qui vous permettra d’exécuter des fonctions d’agrégation sur des colonnes non groupées (telles que SUM, COUNT, AVG, etc.).

TABLE:
ID NAME
1  Peter
2  John
3  Greg
4  Peter

SELECT *
FROM TABLE
ORDER BY NAME

= 
3 Greg
2 John
1 Peter
4 Peter

SELECT Count(ID), NAME
FROM TABLE
GROUP BY NAME

= 
1 Greg
1 John 
2 Peter

SELECT NAME
FROM TABLE
GROUP BY NAME
HAVING Count(ID) > 1

=
Peter
227
RiddlerDev

ORDER BY: trie les données par ordre croissant ou décroissant. 

Considérons la tableCLIENTS:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Voici un exemple permettant de trier le résultat par ordre croissant par NOM:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

Cela produirait le résultat suivant:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

GROUP BY: organise des données identiques en groupes.

Maintenant,CLIENTStable contient les enregistrements suivants avec des noms en double:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

si vous souhaitez regrouper des noms identiques en un seul nom, la requête GROUP BY se présente comme suit:

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

Cela produirait le résultat suivant: (Pour des noms identiques, il choisirait le dernier et enfin trier la colonne par ordre croissant)

    +----+----------+-----+-----------+----------+   
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  4 | kaushik  |  25 | Mumbai    |  6500.00 |
    |  6 | Komal    |  22 | MP        |  4500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    |  2 | Ramesh   |  25 | Delhi     |  1500.00 |
    +----+----------+-----+-----------+----------+

comme vous l'avez déduit qu'il n'est d'aucune utilité sans fonctions SQL telles que sum, avg etc. 

alors passez par cette définition pour comprendre le bon usage de GROUP BY:

Une clause GROUP BY fonctionne sur les lignes renvoyées par une requête en résumant lignes identiques dans un groupe unique/distinct et renvoie une seule ligne avec le résumé pour chaque groupe, en utilisant l’agrégat approprié fonctionnent dans la liste de sélection, comme COUNT (), SUM (), MIN (), MAX (), AVG (), etc.

Désormais, si vous souhaitez connaître le montant total du salaire de chaque client (nom), la requête GROUP BY se présente comme suit:

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
     GROUP BY NAME;

Cela produirait le résultat suivant: (somme des salaires de noms identiques et tri de la colonne NOM après suppression des noms identiques)

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+
61
JerryGoyal

La différence est exactement ce que son nom l'indique: un groupe en effectuant une opération de regroupement et un ordre par tris.

Si vous faites SELECT * FROM Customers ORDER BY Name, vous obtenez la liste des résultats triée par nom de client.

Si vous utilisez SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive, vous obtenez le nombre de clients actifs et inactifs. Le groupe a agrégé les résultats en fonction du champ que vous avez spécifié.

22
Max Schmeling

Ils ont une signification totalement différente et ne sont pas vraiment liés.

ORDER BY vous permet de trier le jeu de résultats en fonction de différents critères, tels que le premier tri par nom de a-z, puis le tri par prix.

(COMMANDER PAR NOM, prix DESC)

GROUP BY vous permet de prendre votre jeu de résultats, de le regrouper en groupes logiques, puis d'exécuter des requêtes agrégées sur ces groupes. Vous pouvez par exemple sélectionner tous les employés, les regrouper par lieu de travail et calculer le salaire moyen de tous les employés de chaque lieu de travail.

14
PatrikAkerstrand

Simple, ORDER BY ordonne les données et GROUP BY, ou combine les données.

ORDER BY ordonne le jeu de résultats selon le champ mentionné, par défaut en ordre croissant.

Supposons que vous lancez une requête en tant que ORDER BY (student_roll_number), elle vous montrera le résultat dans l'ordre croissant des numéros de rôle des élèves. Ici, l'entrée student_roll_number peut se produire plus d'une fois.

Dans GROUP BY, nous l'utilisons avec des fonctions d'agrégat. Les données sont regroupées selon la fonction d'agrégat et nous obtenons le résultat. Ici, si notre requête a SUM (marks) avec GROUP BY (student_first_name), elle montrera la somme des notes des étudiants appartenant à chaque groupe (tous les membres d’un groupe ayant le même prénom).

8
Swapnil Chincholkar

GROUP BY est utilisé pour regrouper des lignes dans une sélection, généralement lors de l'agrégation de lignes (par exemple, calcul de totaux, de moyennes, etc. pour un ensemble de lignes avec les mêmes valeurs pour certains champs).

ORDER BY est utilisé pour ordonner les lignes résultant d'une instruction select.

4
Cătălin Pitiș

Quelques bons exemples ici. Tout comme pour ajouter mon propre extrait de webcheatsheet qui donne de bons exemples clairs, tout en vous permettant d'exécuter votre propre code SQL.

SQL Commander par

SQL Group By

4
kevchadders
  1. GROUP BY regroupera les enregistrements en fonction de la colonne spécifiée, ce qui vous permettra d’exécuter des fonctions d’agrégation sur des colonnes non groupées (telles que SUM, COUNT, AVG, etc.). ORDER BY modifie l'ordre dans lequel les articles sont retournés.
  2. Si vous sélectionnez SELECT IsActive, COUNT (*) FROM Clients GROUP BY IsActive , Vous obtenez le nombre de clients actifs et inactifs. Le groupe a agrégé les résultats en fonction du champ que vous avez spécifié. Si vous sélectionnez SELECT * FROM Clients ORDER BY Name , Vous obtenez la liste des résultats triée par nom du client.
  3. Si vous GROUPEZ, les résultats ne sont pas nécessairement triés; bien que dans de nombreux cas, ils puissent apparaître de manière intuitive, ce n'est pas garanti par la clause GROUP. Si vous souhaitez que vos groupes soient triés, utilisez toujours explicitement ORDER BY après GROUP BY.
  4. Les données groupées ne peuvent pas être filtrées par la clause WHERE. Les données de commande peuvent être filtrées par la clause WHERE.
1
Khadija

ORDER BY affiche un champ en ordre croissant ou décroissant. Alors que GROUP BY affiche les mêmes noms de champs, identifiants, etc. dans une seule sortie.

1
Im_khan

Notez que GROUP BY n'est pas toujours nécessaire car (du moins dans PostgreSQL et probablement dans d'autres variantes SQL), vous pouvez utiliser ORDER BY avec une liste et vous pouvez toujours utiliser ASC ou DESC per column .. .

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
0
John