• # GROUP BY

    Posté par (site web personnel) . En réponse au message Requêtes SQL. Évalué à 5.

    Hello,

    Pour ta première requête:

    SELECT status, count(*) FROM table_donnees GROUP BY status;
    
    

    Ne retournera pas de 0 en effet. Dans ce cas, le plus simple est de créer toi même une table statuses(INT status) dans laquelle tu auras ta liste de status. Il te suffit ensuite de joindre:

    SELECT
     s.status
     , COUNT(*)
    FROM
     statuses s
    LEFT JOIN
     table_donnees d ON d.status=s.status
    GROUP BY 
     s.status
    ;
    
    

    En cas de nouveau status, il te suffit de rajouter une ligne dans statuses.

    Ta seconde est un chouia plus complexe, et peut être gérée de plusieurs manières. Ce que tu veux au final c'est une valeur à utiliser dans le GROUP BY.

    Version simple:

    SELECT 
     CASE valeur 
     WHEN BETWEEN 0 AND 10 THEN '0-10'
     WHEN BETWEEN 11 AND 20 THEN '11-20'
     ...
     END as echelon
     , count(*)
    FROM
     table_donnees 
    GROUP BY 
     echelon
    ;
    
    

    Si encore une fois tu veux pouvoir voir les échelons avec 0 rows, il te suffit de créer une table echelons (echelon, valeur_debut, valeur_fin), de la joindre à table_donnees et de grouper sur echelons.echelon.