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