Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rufen Sie die Daten der letzten 3 Monate als separate Spalten und nicht als Zeilen für jeden Benutzer ab

  1. Verwenden Sie LEFT JOIN Um sicherzugehen, erhalten Sie eine vollständige Liste der Unternehmen, obwohl für keinen Monat eine Rechnung vorliegt.
  2. Sie müssen n Spalten manuell oder mit einem Skript erstellen.
  3. Sie können einfach beitreten, es ist keine Unterabfrage erforderlich.
  4. Verwenden Sie GROUP BY um einen einzigen Datensatz pro Unternehmen zu generieren.
  5. Verwenden Sie CASE WHEN oder IF ELSE um n Spalten zu erstellen und nur Daten aus der relevanten Zeile auszuwählen. Es kann die erste oder eine beliebige Zeile sein, verwenden Sie also die Aggregatfunktion, um Daten auszuwählen, selbst wenn sie sich in einer beliebigen Zeile für eine Gruppe befinden, indem Sie andere Zeilenwerte als NULL festlegen als Aggregatfunktion Nullwerte ausschließen.
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;