Maison > base de données > tutoriel mysql > Comment puis-je simplifier l'agrégation de colonnes avec des filtres distincts dans PostgreSQL ?

Comment puis-je simplifier l'agrégation de colonnes avec des filtres distincts dans PostgreSQL ?

Linda Hamilton
Libérer: 2025-01-22 17:26:10
original
926 Les gens l'ont consulté

How Can I Simplify Aggregating Columns with Distinct Filters in PostgreSQL?

Rationalisation de l'agrégation de colonnes avec des filtres distincts dans PostgreSQL

Le code suivant regroupe les données de plusieurs tables, en appliquant des filtres distincts pour catégoriser les parties jouées, gagnées et perdues. Bien que fonctionnel, sa complexité et sa longueur justifient une approche plus efficace. Cet article explore des méthodes plus simples.

Exploiter la clause FILTER (PostgreSQL 9.4 et versions ultérieures)

PostgreSQL 9.4 et versions ultérieures proposent la clause SQL FILTER standard, permettant un filtrage dynamique au sein des agrégations. Cela simplifie considérablement la requête :

<code class="language-sql">SELECT u.name,
       COUNT(*) FILTER (WHERE g.winner_id > 0) AS played,
       COUNT(*) FILTER (WHERE g.winner_id = u.id) AS won,
       COUNT(*) FILTER (WHERE g.winner_id <> u.id) AS lost
FROM games g
JOIN users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP BY u.name;</code>
Copier après la connexion

Alternative pour les anciennes versions de PostgreSQL

Pour les versions antérieures à PostgreSQL 9.4, une solution de contournement utilisant des expressions booléennes au sein de la fonction d'agrégation est disponible :

<code class="language-sql">SELECT u.name,
       COUNT(g.winner_id > 0 OR NULL) AS played,
       COUNT(g.winner_id = u.id OR NULL) AS won,
       COUNT(g.winner_id <> u.id OR NULL) AS lost
FROM games g
JOIN users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP BY u.name;</code>
Copier après la connexion

Cette méthode, bien que moins efficace que la clause FILTER, offre une solution pratique pour les anciennes installations PostgreSQL.

Résumé

L'utilisation de la clause FILTER (PostgreSQL 9.4) ou de la solution de contournement booléenne fournit une solution plus concise et, dans la plupart des cas, performante. La clause FILTER est l'approche privilégiée pour les versions plus récentes en raison de sa lisibilité et de son efficacité améliorées. Pour les anciennes versions, la solution de contournement booléenne reste une alternative viable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal