Ah, mais non, c'est faux.
Si tu fais COUNT(u.mineur), tu comptes toutes les lignes, y compres celles où l'âge est supérieur à 18.
Avec un moteur pour lequel vrai = 1, et faux = 0 (Oracle), il aurait fallu faire la somme :
SUM (u.mineur)
Avec PostgreSQL, il faut convertir les booléens en entier
SELECT
community_id, SUM(u.mineur::integer) AS nbmineurs,
SUM(u.vieux::integer) AS nbvieux
FROM
(
SELECT users.*, age 60 AS vieux,
community.id AS community_id
FROM users
JOIN community
ON community.iduser = users.id
) u
GROUP BY community_id
Remarque au passage : si tes utilisateurs ne font partie que d'une seule communauté, la table community telle que décrite est inutile (on met l'identifiant de la communauté directement dans users).
Dans le cas contraire, il y a une relation n-n entre utilisateurs et communautés, donc on appelle habituellement la table avec un nom du style : usercommunity, pour éviter la confusion avec une table "community" qui contiendra elle les informations spécifiques à la communauté.
[^] # Re: Une solution
Posté par Flo . En réponse au message calcul sur plusieurs aggregats. Évalué à 1.
Ah, mais non, c'est faux.
Si tu fais COUNT(u.mineur), tu comptes toutes les lignes, y compres celles où l'âge est supérieur à 18.
Avec un moteur pour lequel vrai = 1, et faux = 0 (Oracle), il aurait fallu faire la somme :
SUM (u.mineur)
Avec PostgreSQL, il faut convertir les booléens en entier
SELECT
community_id, SUM(u.mineur::integer) AS nbmineurs,
SUM(u.vieux::integer) AS nbvieux
FROM
(
SELECT users.*, age 60 AS vieux,
community.id AS community_id
FROM users
JOIN community
ON community.iduser = users.id
) u
GROUP BY community_id
Remarque au passage : si tes utilisateurs ne font partie que d'une seule communauté, la table community telle que décrite est inutile (on met l'identifiant de la communauté directement dans users).
Dans le cas contraire, il y a une relation n-n entre utilisateurs et communautés, donc on appelle habituellement la table avec un nom du style : usercommunity, pour éviter la confusion avec une table "community" qui contiendra elle les informations spécifiques à la communauté.