- Home
- Categorie
- Coding e Sistemistica
- PHP
- COUNT con condizione (IF)
-
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 ROLLUPAdesso 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.
-
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))
-
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.