Maison >base de données >tutoriel mysql >Comment puis-je agréger efficacement une seule colonne dans des requêtes SQL complexes ?

Comment puis-je agréger efficacement une seule colonne dans des requêtes SQL complexes ?

DDD
DDDoriginal
2024-12-25 18:07:20970parcourir

How Can I Efficiently Aggregate a Single Column in Complex SQL Queries?

Agréger une seule colonne dans des requêtes complexes

Lorsque vous travaillez avec des requêtes contenant de nombreuses colonnes, il peut être difficile d'agréger efficacement une seule colonne. Bien que la méthode conventionnelle consistant à inclure tous les champs dans les clauses SELECT, GROUP BY et ORDER BY puisse suffire, elle peut conduire à des requêtes verbeuses.

Alternative plus simple pour PostgreSQL 9.1

Si vous êtes en utilisant PostgreSQL 9.1 ou version ultérieure, une approche plus simple existe. Puisque vous avez spécifié foo1 comme clé primaire, vous pouvez simplifier votre requête comme suit :

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

Agréger d'abord, rejoindre plus tard pour les requêtes multi-tables

Cependant, lorsque vous traitez plusieurs tables et des relations plus complexes, il peut être plus efficace de regrouper d'abord et de rejoindre plus tard. Considérez cette requête révisée :

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 agrégeant et en joignant séparément, vous évitez les frais d'agrégation inutiles pour la plupart de votre requête.

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