Regrouper Postgresql par

Regrouper Postgresql Par



La clause group by de Postgresql est une fonctionnalité utilisée pour unir/combiner les lignes de la table qui contiennent les mêmes données. Cette clause est principalement utilisée pour supprimer les données en double et pour maintenir la concurrence. Chaque fois que nous voulons calculer sum, ou tout autre agrégat comme AVG, etc., cette clause group by est toujours utilisée car il existe de nombreuses clauses utilisées dans PostgreSQL. Mais il existe une hiérarchie entre chaque clause.

FROM > WHERE > « GROUP BY » > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT

Le fonctionnement de PostgreSQL réside dans la clause « où » et la clause « Having ».







Syntaxe



SÉLECTIONNER la colonne

DE dumytable

OÙ [conditions ]

GROUP BY première colonne, deuxième colonne..

ORDRE PAR premièrecolonne, deuxièmecolonne.. ;

Exemple 1



Pour comprendre le concept du regroupement par fonction, nous utilisons ici un exemple. Dans le tableau des passagers, vous pouvez voir que les noms de famille sont les mêmes pour certaines personnes. Chaque nom qui ressemble à un autre forme un groupe, et leur paiement s'ajoute collectivement à chaque même nom. Ceci est développé dans l'exemple ci-dessous.





>> sélectionnez lname, SUM (paiement) du passager GROUP BY lname ;

Le nom de famille du passager est sélectionné à l'aide d'une fonction intégrée 'SOMME' qui prend la colonne 'paiement'. Et ajoutez le paiement pour les personnes ayant le même nom. Par exemple, le salaire de 'Javed' et 'saad' est ajouté. Alors que pour « Malik » et « Shams », il est mentionné individuellement.



De même, considérons une table « hôpital ». Nous voulons regrouper la ville pour l'âge. Dans cet exemple, une ville existe plus d'une fois dans une colonne. Chaque ville est regroupée avec le même nom de ville. Les âges de chaque groupe de la ville sont additionnés et forment une seule ligne.

Hôpital:

>> sélectionnez la ville, SUM (âge) de l'hôpital GROUP BY city ;

Exemple 2

Alternativement, si nous sélectionnons le nom de famille avec l'identifiant de la table passager, le résultat sera une table différente. Parce que lorsque nous regroupons les deux colonnes ensemble, il affichera le nom de chaque passager car l'identifiant de chaque passager, même ayant un nom de famille commun, est différent. La somme est calculée dans une colonne séparée, mais le paiement de chaque passager est mentionné devant son nom car le regroupement de lname ne se fait pas ici.

Ceci est un exemple de la clause group by avec plusieurs colonnes. Parce que lorsque plusieurs colonnes sont sélectionnées pour le regroupement, la valeur résultante est modifiée par rapport au groupe par une seule table.

>> sélectionnez id, lname, SUM (paiement) du passager GROUP BY id, lname ;

À partir de la sortie, vous remarquerez une chose : tout d'abord, tous les lname qui ne sont pas communs sont affichés, puis ceux qui sont identiques sont mentionnés dans le tableau.

Exemple 3

Cet exemple a une condition de jointure et une clause group by. Comme 'join' est utilisé, cela signifie que nous avons utilisé deux tables ici. L'un est 'article', et l'autre est 'commandes'.

Articles:

Ordres:

Nous avons utilisé une méthode de concaténation (utilisée pour joindre deux chaînes) pour joindre les valeurs de deux colonnes de la table 'items' avec ',' et nommer la colonne collectivement comme 'description'. C'est facultatif; vous pouvez les prendre séparément. Dans cette requête, le mot clé 'USING' identifie la colonne spécifique de l'autre table. L'adresse de la table des articles est mise en correspondance avec la colonne d'adresse de la table « commandes ». Cela se fait en faisant une jointure entre deux tables. Comme dans les exemples précédents, les deux colonnes seront sélectionnées par la clause GROUP BY.

>> sélectionner le nom || ',' || catégorie en tant que description, adresse des éléments jointure interne Orders USING (adresse) GROUP BY adresse, description ;

Vous pouvez observer que 5 lignes seront sélectionnées avec l'adresse des articles correspondant à l'adresse des commandes. Et puis, la colonne Description sera formée en correspondance avec la colonne d'adresse.

De même, il existe un autre exemple de concaténation avec le facteur âge dans deux tableaux. L'un est « passager » et l'autre est « travailleur ». La concaténation se fait entre le prénom et le nom de famille. Ces deux noms sont séparés par l'espace entre deux noms. Nous avons pris une partie de la table des travailleurs ici.

Ouvrier:

La requête fonctionnera de telle sorte que le point où le fname du travailleur est mis en correspondance avec le passager, l'âge du passager, s'affiche dans la colonne d'âge.

>> sélectionnez fname || ‘ ‘ || passager.lname comme nom_complet, passager.age du passager INNER join worker USING (fname) GROUP BY nom_complet, passager.age ORDER BY passager.age;

Une rangée est formée. Le nom_complet est créé en joignant deux colonnes avec un espace, et l'adresse est sélectionnée là où le fname du passager correspond au fname du travailleur.

Exemple 4

Cet exemple traite de l'utilisation d'une fonction count () pour compter les identifiants de la table 'items'. Ceci est à nouveau groupé par l'id de la table.

>> Sélectionnez id, COUNT (id) FROM items GROUP BY id ;

Les lignes de la colonne id sont divisées en groupes. Chaque groupe est compté dans la colonne selon le nombre de fois qu'il apparaît dans la colonne. Dans la table résultante, une nouvelle colonne avec un nom 'count' est créée, et les valeurs du count sont écrites ici devant chaque groupe.

Votre pgAdmin

Nous avons maintenant appliqué quelques exemples du côté du tableau de bord de PostgreSQL. Ces exemples sont différents en quelque sorte car ils forment une ligne de sous-total à partir de la colonne d'origine lorsque l'un des éléments diffère des autres, de sorte que la valeur est renvoyée sous la forme NULL.

Considérez le premier exemple; ici, nous avons créé un nom de colonne 'ALL' qui a combiné deux colonnes. Une adresse et une catégorie. La colonne 'ALL' compte les valeurs dans les deux colonnes collectivement. La colonne d'adresse est regroupée en tant que 'add' et la colonne de catégorie est regroupée séparément en tant que 'cat'. Comme les noms de colonne des deux tables utilisées peuvent être mis en correspondance les uns avec les autres. Ainsi, chaque colonne de la table respective est accessible par un objet spécifique.

La condition appliquée à la commande dépend de l'identifiant et du numéro de commande. Lorsque ces numéros d'identification et de commande sont identiques, les données sont extraites. De même, une condition supplémentaire est également ajoutée pour le nom.

>> SELECT o.address, category, count (*) AS 'ALL', GROUPING(o.address) AS 'add' , GROUPING (category ) AS 'cat' FROM articles I, commandes o where i.order_no = o. order_id AND i.address= 'Lahore' GROUP BY CUBE (o.address, category) ORDER BY 1, 2;

Pour la ville de Lahore, une catégorie est sélectionnée. Il y a 4 possibilités. Parfois, le jouet est présent mais pas l'adresse. Et vice versa. Mais il existe un temps où la catégorie et l'adresse sont présentes.

Maintenant, si nous changeons la condition du nom d'une table et changeons la table avec other. 'Items.address' est remplacé par 'order.address', alors le résultat est différent.

Conclusion

La clause « Postgresql group by » est utilisée pour appliquer n'importe quel opérateur d'agrégation aux données collectives. Cet article utilise la clause group by avec la fonction count, les jointures et la sélection et le regroupement de plusieurs colonnes. Je suis sûr que ce tutoriel sera le meilleur moyen de compréhension pour les lecteurs.