• User

    COUNT con condizione (IF)

    Buongiorno a tutti, mi sono appena iscritto a questo forum perchè, leggendo un po' tra le varie aree, ho trovato risposte molto interessanti alle questioni poste; però io ne ho una a cui non ho trovato risposte e provo ad esporla.

    Ho creato una tabella in MySql per gestire dei costi giornalieri a fronte di determinate tipologie di spedizione in modo da ottenere poi dei riepiloghi mensili ed annui relativamente al numero di spedizioni effettuate e dei relativi costi.
    La tabella (che si chiama 'Spedizioni') è formata dalle seguenti colonne:
    Giorno (contiene il giorno in cui è avenuta la spedizione)
    Mese (contiene il mese in cui è avenuta la spedizione)
    Anno (contiene l'anno in cui è avenuta la spedizione)
    TipoSped (può contenere solo 2 valori: A = Abbonato / C = Pagam. Contanti
    Prezzo (importo pagato per la spedizione)

    Per estrarre i dati che mi servono ho scritto questa query :

    SELECT Anno, Mese, COUNT(IF(TipoSped = 'A', 'TipoSped', 0)) as NrSpedA, SUM(IF(TipoSped = 'A', 'Prezzo', 0)) as CostoA, COUNT(IF(TipoSped = 'C', 'TipoSped', 0)) as NrSpedC, SUM(IF(TipoSped = 'C', 'Prezzo', 0)) as CostoC
    FROM Spedizioni
    GROUP BY Anno, Mese WITH ROLLUP

    Adesso la situazione è questa:
    La funzione SUM restituisce i valori corretti; crea cioè le due colonne riferite alle tipologie A e C con i totali dei costi riferiti alla tipologia selezionata ed i totali a 'rottura' (cambio di mese e di anno).

    La funzione COUNT invece, in entrambe le colonne, conteggia TUTTI i records senza fare suddivisione tra tipologia A e tipologia C (riporta infatti gli stessi valori in tutte e due le colonne) ed anche a livello di totalizzatori il risultato è identico in entrambe le colonne.

    Il risultato dovrebbe essere una cosa simile a questo:
    Anno Mese NrSpedA CostoA NrSpedC CostoC
    2008.....1..........5.....15.00..........3....21.00
    2008.....2..........2.......8.00..........1....11.00
    eccetera (i puntini ovviamente sono solo per un corretto incolonanmento dei dati perchè non so come fare diversamente).

    Spero di essermi spiegato bene e di non essere stato troppo prolisso come il mio solito.

    Confido in un vostro aiuto per la soluzione del mio problema e Vi ringrazio tutti in anticipo per la collaborazione.


  • Bannato User Attivo

    non so se ho afferrato il problema, tento di darti una strada, perchè invece della count non usi la sum anche per NrSpedA, NrSpedC? Qualcosa tipo COUNT(IF(TipoSped = 'C', 'TipoSped', 0))=>SUM(IF(TipoSped = 'C', 1, 0))


  • User

    Saro78 ...... sei un genio !!!!!!

    A questo proprio non ci avevo pensato (e dire che è il classico uovo di colombo).

    Comunque la tua soluzione funziona perfettamente.

    Grazie.

    :bravo: