Maison >base de données >tutoriel mysql >Comment puis-je agréger efficacement une seule colonne dans une requête multi-colonnes ?

Comment puis-je agréger efficacement une seule colonne dans une requête multi-colonnes ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-20 07:46:10941parcourir

How Can I Efficiently Aggregate a Single Column in a Multi-Column Query?

Agréger une seule colonne dans une requête multi-colonnes

Présentation

Agréger une seule colonne dans une requête avec de nombreuses autres colonnes peut être un défi, en particulier lorsque tous les champs SELECT et ORDER BY doivent être soit agrégés, soit faire partie de GROUP BY. Cette structure de requête détaillée peut devenir lourde à gérer.

Requête simplifiée pour PostgreSQL 9.1

Dans PostgreSQL 9.1 ou version ultérieure, une solution plus simple existe. Lorsque vous utilisez des clés primaires comme critères GROUP BY, la requête peut être rationalisée :

SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ')
FROM tbl1
GROUP BY 1  -- Group by primary key (foo1)
ORDER BY foo7, foo8;

Requête avec plusieurs tables

Pour les requêtes impliquant plusieurs tables avec des relations variables, il est plus efficace d'agréger d'abord les données et rejoignez les tables plus tard :

SELECT t1.foo1, t1.foo2, ...,
     t2.bar1, t2.bar2, ...,
     a.aggregated_col
FROM tbl1 t1
LEFT JOIN tbl2 t2 ON ...
...
LEFT JOIN (
   SELECT some_id, string_agg(agg_col, ', ') AS aggregated_col
   FROM agg_tbl a ON ...
   GROUP BY some_id
   ) a ON a.some_id = ?.some_id
ORDER BY ...

En séparant l'agrégation et la jointure, la majorité de la requête peut éviter une agrégation inutile, réduisant ainsi la complexité et améliorant performances.

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!

Déclaration:
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