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