Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Buscar dados dos últimos 3 meses como colunas separadas e não como linhas para cada usuário

  1. Use LEFT JOIN para ter certeza, você obtém uma lista completa de empresas, mesmo que não haja nenhuma fatura para nenhum mês.
  2. Você precisa criar n colunas manualmente ou usando um script.
  3. Você pode simplesmente fazer a junção simples, nenhuma subconsulta é necessária.
  4. Usar GROUP BY para gerar um único registro por empresa.
  5. Use CASE WHEN ou IF ELSE para criar n colunas e selecionar dados apenas da linha relevante. Pode ser a primeira ou qualquer linha, portanto, use a função de agregação para selecionar dados, mesmo que esteja em qualquer linha de um grupo, tornando outros valores de linha como NULL como função agregada exclui 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;