• User Newbie

    Report da MYSQL - select condizionato e "group by"

    Ciao a tutti,

    Cerco di esporre il problema nel modo piu' semplice,
    Data una tabella con le seguenti colonne:

    id - giorno - nome - issue
    tenendo presente che il campo issue puo' assumere i seguenti valori : 0, 1, 2, 3

    avrei la necessita' di creare un report che mi visualizza dato un "giorno" la lista dei nomi e affianco la somma di tutte le issue con valore 0 e il conteggio di tutte le issue con valore maggiore di 0

    esempio pratico, inserisco delle entry a caso:

    [INDENT]1 09/04/2009 giulio 0
    2 09/04/2009 matteo 0
    3 09/04/2009 giulio 1
    4 09/04/2009 giulio 0
    5 09/04/2009 matteo 3
    6 09/04/2009 giulio 2
    [/INDENT]
    dovrei ottenere una tabella di questo tipo

    nome issue0 totissues
    giulio 2 3
    matteo 1 3

    mi e' stato suggerito di utilizzare una query richiamata in php simile a questa

    SELECT nome, SUM(IF(issue =0,0,issue)) AS issue0, SUM(IF(issue > 0,0,issue)) AS totissues FROM tabella group by nome

    Il problema e' che non vengon fuori i valori corretti...
    Mi sapreste dare una mano??? qual'e' la via piu' breve e/o semplice??


  • User Attivo

    Ciao,
    entrambe le somme sono errate. La prima equivale a SUM(issue), la seconda darà sempre 0 come risultato (a m eno di non inserire numeri negativi come valori di issue)

    Se ho capito bene cosa vuoi ottenere, la query corretta è:

    
    SELECT nome, SUM(IF(issue=0,1,0)) AS issue0, SUM( issue ) AS totissues
    FROM dd
    GROUP BY nome
    
    

    Alessandro


  • User Newbie

    Funziona!

    Mi daresti una spiegazione sulla query in modo tale da capire esattamente il funzionamento ????

    Grazie mille,
    Davide


  • User Attivo

    Ciao,
    questo

    
    SUM(IF(issue=0,1,0)) 
    
    

    è il codice per la conta degli "issue" pari a zero.
    Se issue=0, somma 1, altrimenti 0
    Nel caso volessi contare, ad esempio, tutti gli issue=3 ti basta modificare l'espressione di controllo nell'IF mettendo appunto issue=3.

    Questo

    
    SUM(issue) 
    
    

    somma semplicemente tutti gli issue. Non serve inserire il controllo issue>0 se questo non può assumee valori negativi.
    Non è necessario neanche diversificare il caso =0 e !=0, perchè sommando 0 non cambierebbe nulla al risultato finale.

    Alessandro


  • User Newbie

    Capito,

    Grazie mille
    Davide