Maison >base de données >tutoriel mysql >Comment puis-je agréger efficacement une colonne dans une requête multi-colonnes ?
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!