• [^] # Re: Une solution

    Posté par . 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é.