Comment utiliser group by, having, et de l'ordre par des clauses SQL

SQL vous donne des options pour récupérer, analyser et afficher les informations dont vous avez besoin avec le GROUP BY, HAVING et ORDER BY. Voici quelques exemples de la façon dont vous pouvez les utiliser.

Sommaire

Les clauses GROUP BY

Parfois, plutôt que de récupérer des enregistrements individuels, vous voulez savoir quelque chose au sujet d'un groupe d'enregistrements. La PAR GROUPE clause est l'outil qu'il vous faut.

Supposons que vous êtes le responsable d'un autre point de vente, et vous voulez regarder la performance de votre force de vente. Si vous le faites d'une simple SELECT, tels que la requête suivante:

image0.jpg
InvoiceNo SELECT, SaleDate, vendeur, TotalSaleFROM SALES-

Ce résultat vous donne une idée de la façon dont vos vendeurs font parce que quelques ventes totales sont impliqués. Cependant, dans la vie réelle, une entreprise aurait beaucoup plus de ventes - et il ne serait pas si facile de dire si les objectifs de vente ont été atteints.

Pour faire l'analyse réelle, vous pouvez combiner les PAR GROUPE avec une clause de la agrégat fonctions (également appelés fonctions set) Pour obtenir une image quantitative de la performance des ventes. Par exemple, vous pouvez voir qui est vendeur vendant plus des articles de grande billet rentables en utilisant la moyenne (AVGFonction) comme suit:

Salesperson SELECT, AVG (TotalSale) DE SALESGROUP PAR Salesperson-

Exécution de la requête avec un système de gestion de base de données différente serait de récupérer le même résultat, mais peut apparaître un peu différent.

image1.jpg

La valeur moyenne des ventes de Bennett est considérablement plus élevé que celui des deux autres vendeurs. Vous comparez les ventes totales avec une requête similaire:

image2.jpg
Salesperson SELECT, SUM (TotalSale) DE SALESGROUP PAR Salesperson-

Bennett a également les plus hautes ventes totales, ce qui est cohérent avec le plus de ventes ayant en moyenne.

HAVING




Vous pouvez analyser les données groupées en outre en utilisant le AYANT clause. La AYANT article est un filtre qui agit semblable à un clause, mais sur des groupes de lignes plutôt que sur des lignes individuelles. Pour illustrer la fonction de la AYANT article, supposons que le directeur des ventes considère Bennett d'être dans une classe à part.

Sa performance fausse les données globales pour l'autre vendeurs. (Aha -. Une courbe-dépanneuse) Vous pouvez exclure les ventes de Bennett à partir des données groupées en utilisant une AYANT article comme suit:

Salesperson SELECT, SUM (TotalSale) DE SALESGROUP PAR SalespersonHAVING Salesperson lt;> 'Bennett'-

Seules les lignes où le vendeur est pas Bennett sont considérés.

image3.jpg

Les clauses ORDER BY

Utilisez le COMMANDÉ PAR clause pour afficher la table de sortie d'une requête dans l'ordre croissant ou décroissant ordre alphabétique. Alors que le PAR GROUPE clause rassemble rangées en groupes et trie les groupes dans l'ordre alphabétique, COMMANDÉ PAR trie des lignes individuelles. La COMMANDÉ PAR clause doit être la dernière clause que vous spécifiez dans une requête.

Si la requête contient également une PAR GROUPE clause, la clause organise d'abord les lignes de sortie en groupes. La COMMANDÉ PAR clause trie ensuite les rangs au sein de chaque groupe. Si vous avez pas PAR GROUPE article, la déclaration considère l'ensemble de la table en tant que groupe, et de la COMMANDÉ PAR clause trie toutes ses lignes selon la colonne (ou colonnes) que le COMMANDÉ PAR clause spécifie.

Pour illustrer ce point, examiner les données dans la table sales. La table SALES contient des colonnes pour InvoiceNo, Date de vente, Vendeur, et TotalSale. Si vous utilisez l'exemple suivant, vous verrez toutes les données de la table SALES - mais dans un ordre arbitraire:

SELECT * FROM VENTES -

Dans une mise en œuvre, cela peut être l'ordre dans lequel vous avez inséré les lignes dans la table- dans une autre mise en œuvre, l'ordre peut être que des mises à jour les plus récentes. L'ordre peut également changer de façon inattendue si quelqu'un réorganise physiquement la base de données. Voilà une raison pour laquelle il est généralement une bonne idée de spécifier l'ordre dans lequel vous voulez les rangées.

Vous pouvez, par exemple, vous voulez voir les lignes dans l'ordre par le Date de vente comme ça:

SELECT * FROM VENTES ORDER BY SaleDate -

Cet exemple renvoie toutes les lignes de la table sales dans l'ordre par Date de vente.

Pour les lignes avec le même Date de vente, l'ordre par défaut dépend de la mise en œuvre. Vous pouvez, toutefois, spécifier comment trier les lignes qui partagent le même Date de vente. Vous pouvez voir les ventes pour chaque Date de vente dans l'ordre par InvoiceNo, comme suit:

SELECT * DE VENTES ORDER BY SaleDate, InvoiceNo -

Cet exemple ordonne d'abord les ventes de Date de vente- puis pour chaque Date de vente, il ordonne les ventes de InvoiceNo. Mais ne confondez pas cet exemple avec la requête suivante:

SELECT * FROM VENTES ORDER BY InvoiceNo, SaleDate -

Cette requête ordonne d'abord les ventes de INVOICE_NO. Ensuite, pour chaque différent InvoiceNo, la requête ordonne les ventes de Date de vente. Ce ne sera probablement pas obtenir le résultat que vous voulez, car il est peu probable que plusieurs dates de vente sera exister pour un numéro de facture unique.

La requête suivante est un autre exemple de la façon dont SQL peut renvoyer des données:

SELECT * FROM VENTES ORDER BY Salesperson, SaleDate -

Cet exemple premières commandes par Vendeur et ensuite par Date de vente. Après vous regardez les données dans cet ordre, vous voudrez peut-être pour l'inverser, comme suit:

SELECT * FROM VENTES ORDER BY SaleDate, Salesperson -

Cet exemple ordonne les lignes d'abord par Date de vente et ensuite par Vendeur.

Tous ces exemples sont ordonnant ascendant (ASC) Afin, ce qui est de l'ordre de tri par défaut. Le dernier SELECT montre les ventes antérieures premier - et, dans une date donnée, montre ventes pour 'Adams' avant «Baker». Si vous préférez descendant (DESC) Commande, vous pouvez spécifier cet ordre pour un ou plusieurs des colonnes d'ordre, comme suit:

SELECT * FROM SalesOrder PAR SaleDate DESC, Salesperson ASC -

Cet exemple spécifie un ordre décroissant pour les dates des ventes, montrant les ventes les plus récentes en premier, et un ordre croissant pour les vendeurs, les mettre dans l'ordre alphabétique. Cela devrait vous donner une meilleure idée de la façon dont la performance de Bennett se compare à celle de l'autre vendeurs.


» » » » Comment utiliser group by, having, et de l'ordre par des clauses SQL