Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

COUNT sur 1 colonne avec groupage sur les résultats : possible ?


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    COUNT sur 1 colonne avec groupage sur les résultats : possible ?
    Bonjour,

    Petit soucis de requête que je ne vois pas du tout comment formuler.
    Exemple de données :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     id_utilisateur | check_user 
    ----------------+------------
                  2 | f
                  3 | t
                  3 | f
                  3 | f
                  5 | t
                  5 | t


    Je cherche à récupérer ce genre de résultat :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     id_utilisateur | check_ok | check_nok
    ----------------+----------+-----------
                  2 |        0 |        1
                  3 |        1 |        2
                  5 |        2 |        0


    La colonne check_ok donne le nombre de ligne à TRUE et check_nok pour FALSE
    Est-il possible de faire cela en une seule requête ?

  2. #2
    Modérateur

    C'est un regroupement avec PIVOT.
    Je n'ai pas trouvé cette commande dans la documentation. Toutefois, c'est assez facile à faire avec une requête classique :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  id_utilisateur
        ,   SUM(CASE check_user WHEN 't' THEN 1 ELSE 0 END) AS check_ok
        ,   SUM(CASE check_user WHEN 'f' THEN 1 ELSE 0 END) AS check_nok
    FROM    matable
    GROUP BY id_utilisateur
    ;
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Membre régulier
    Merci à toi :-)
    Et en effet une fois la requête sous les yeux c'est tout simple...
    J'aurai jamais pensé utiliser CASE dans SUM()