URL: https://linuxfr.org/forums/programmation-sql/posts/calcul-sur-plusieurs-aggregats Title: calcul sur plusieurs aggregats Authors: PyroTokyo Date: 2012年06月21日T05:19:38+02:00 Tags: Score: 4 Bonjour tout le monde Ces temps-ci, je cherche a faire un peu d'analyse de donnees sur mes contenus, et je commence a tomber sur des cas assez recurrents qui me posent probleme. Admettons que j'ai 2 tables, une table "community" avec 2 colonnes "user_id" et "id", et une table "users" avec disons "id" et "age" Si je veux le nombre de moins de 30 ans par communaute, pas de soucis ```sql select community.id, count(user_id) from community, users where users.id=user_id and age<30 group by community.id ``` Par contre, comment les choses se passent si je veux calculer plusieurs aggregats avec des filtres differents ? Par exemple, dans une meme requete, renvoyer le nombre de moins de 18 ans et de plus de 60 ans ? J'avais commence quelque chose avec des clauses `select` imbriquees dans mon `from`, mais je me suis vite rendu compte que mon extraction commencait apres que ces `select` aient ete faits en integralite. Si je rajoute un `limit 10` a la fin par exemple, je dois quand meme patienter une eternite. Ainsi, ```sql select q1.id, c1, c2 from (select id, count(user_id) as "c1" from community group by id) as "q1", (select community.id as "id", count(user_id) as "c2" from community, users where users.id=user_id and age<30 group by community.id) as "q2" where q1.id=q2.id ``` semble vraiment inefficace ! Y a-t'il une meilleure methode pour faire cela ?

AltStyle によって変換されたページ (->オリジナル) /