sql >> Base de Datos >  >> RDS >> Mysql

Obtenga los datos de los últimos 3 meses como columnas separadas, no como filas para cada usuario

  1. Utilice LEFT JOIN para asegurarse de obtener una lista completa de las empresas aunque no haya ninguna factura para ningún mes.
  2. Tienes que crear n columnas manualmente o usando un script.
  3. Puede simplemente hacer una unión simple, no se requiere subconsulta.
  4. Usar GROUP BY para generar un único registro por empresa.
  5. Utilice CASE WHEN o IF ELSE para crear n columnas y seleccionar datos solo de la fila relevante. Puede ser la primera o cualquier fila, así que use la función de agregado para seleccionar datos, incluso si están en cualquier fila para un grupo, haciendo que los valores de otras filas sean NULL como función agregada excluye valores nulos.
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;