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

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

DDD
DDDoriginal
2024-12-27 21:32:27776parcourir

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

Agréger une colonne dans une requête avec de nombreuses autres colonnes

Lors d'une requête avec plusieurs colonnes dans l'ensemble de résultats, l'agrégation d'une seule colonne peut être une solution défi. Bien que vous puissiez utiliser la méthode mentionnée dans la réponse référencée, elle peut conduire à des requêtes verbeuses.

Simplification de la requête (PostgreSQL 9.1 et versions ultérieures)

PostgreSQL 9.1 et versions ultérieures propose une approche plus simple. En regroupant par clé primaire d'une table, vous pouvez agréger la colonne spécifiée sans avoir à inclure toutes les colonnes dans la clause GROUP BY.

Par exemple, si foo1 est une clé primaire dans votre exemple de requête :

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

Tables et relations multiples

Lorsque votre requête implique plusieurs tables avec diverses relations, elle est souvent plus efficace pour agréger d'abord puis rejoindre :

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 les opérations d'agrégation et de jointure, votre requête devient plus efficace et plus facile à lire.

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