Mysql
 sql >> Base de données >  >> RDS >> Mysql

Récupérer les données des 3 derniers mois sous forme de colonnes distinctes et non de lignes pour chaque utilisateur

  1. Utilisez LEFT JOIN pour vous assurer que vous obtenez la liste complète des entreprises même s'il n'y a pas de facture pour un mois.
  2. Vous devez créer n colonnes manuellement ou à l'aide d'un script.
  3. Vous pouvez simplement faire une jointure simple, aucune sous-requête n'est requise.
  4. Utilisez GROUP BY pour générer un seul enregistrement par entreprise.
  5. Utilisez CASE WHEN ou IF ELSE pour créer n colonnes et sélectionner les données de la ligne pertinente uniquement. Il peut s'agir de la première ligne ou de n'importe quelle ligne, utilisez donc la fonction d'agrégation pour sélectionner des données même si elles se trouvent sur n'importe quelle ligne d'un groupe en définissant les autres valeurs de ligne comme NULL en tant que fonction d'agrégation, exclure les valeurs nulles.
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;