Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [mysql] query annuale

  1. #1
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837

    [mysql] query annuale

    Salve a tutti,
    ho 2 tabelle così strutturate:

    CLIENTI
    CUST_ID | AZIENDA
    1 | tizio srl
    2 | caio srl

    ORDINI
    ORDER_ID | CUST_ID | DATA_ORDINE | TOTALE
    1 | 1 | 2007-08-22 19:40:41 | 500.00


    In pratica dovrei eseguire una query che mi tiri fuori per ogni cliente la somma totale degli ordini in base agli anni (2007 - 2008 - 2009). E' possibile fare il tutto con un'unica query?

    Codice PHP:
    $dati=mysql_query("SELECT *, SUM(totale) AS tot_anno FROM  clienti c, ordini o WHERE c.cust_id = o.cust_id GROUP BY c.cust_id ORDER BY tot_anno DESC "); 

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Semplicemente oltre che per cust_id raggruppi anche per anno

    GROUP BY c.cust_id,year(data_ordine)

    e poi ordini come preferisci.

  3. #3
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    Grandissimo!
    Grazie mille!

  4. #4
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    Una domanda, se volessi ottenere un risulato di questo tipo:

    Cliente | 2007 | 2008 | 2009
    Tizio | 2.500 | 3.200 | 1.500

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    select *,
    case when year(data_ordine) = 2007 then sum(totale) else 0 end as '2007',
    case when year(data_ordine) = 2008 then sum(totale) else 0 end as '2008',
    case when year(data_ordine) = 2009 then sum(totale) else 0 end as '2009'
    ....
    ....
    GROUP BY c.cust_id,year(data_ordine)

  6. #6
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    VVoVe:
    Pauroso!!
    Il case statement mi era nuovo!
    Sei un mito!

    Codice PHP:
    $dati=mysql_query("select *,
    case when year(date) = 2007 then sum(totale) else 0 end as '2007',
    case when year(date) = 2008 then sum(totale) else 0 end as '2008',
    case when year(date) = 2009 then sum(totale) else 0 end as '2009' FROM customer c, ordini o
    WHERE c.cust_id = o.cust_id GROUP BY o.cust_id,year(date)"
    ) or die(mysql_error()) ; 
    L'unico problema è che non mi raggruppa per utente ovvero una riga per ogni anno.
    Va bene il grosso è fatto!
    Ti devo un paio di cene!

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    SELECT c.cust_id,c.azienda,
    sum(if(year(data_ordine)=2007,totale,0)) as '2007',
    sum(if(year(data_ordine)=2008,totale,0)) as '2008',
    sum(if(year(data_ordine)=2009,totale,0)) as '2009'
    FROM  clienti c, ordini o 
    WHERE c.cust_id = o.cust_id 
    GROUP BY c.cust_id

  8. #8
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.