Mysql
 sql >> Database >  >> RDS >> Mysql

Recupera i dati degli ultimi 3 mesi come colonne separate e non righe per ogni utente

  1. Usa LEFT JOIN per essere sicuro, ottieni l'elenco completo delle aziende anche se non c'è fattura per nessun mese.
  2. Devi creare n colonne manualmente o usando uno script.
  3. Puoi semplicemente fare un semplice join, non è richiesta alcuna sottoquery.
  4. Usa GROUP BY per generare un unico record per azienda.
  5. Usa CASE WHEN o IF ELSE per creare n colonne e selezionare i dati solo dalla riga pertinente. Può essere la prima o qualsiasi riga, quindi usa la funzione di aggregazione per raccogliere i dati anche se si trova in qualsiasi riga per un gruppo, impostando altri valori di riga come NULL come funzione di aggregazione esclude valori nulli.
SELECT 
    u.display_name,
    SUM(IF( bill_month='Jan2k19', package_price, NULL)) as first_bill,
    SUM(IF( bill_month='Feb2k19', package_price, NULL)) as second_bill,
    SUM(IF( bill_month='Mar2k19', package_price, NULL)) as third_bill
FROM bf_users u 
LEFT JOIN bf_monthly_bill b on u.id=b.company_id
GROUP BY u.display_name;