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

MySQL :Somme des valeurs dans les sous-requêtes

Quelques suggestions :

  • Rejoindre les seasons une fois. Une jointure provoque la duplication des lignes de la table de gauche, de sorte qu'elles peuvent être additionnées deux fois par la sum agrégat. En cas de doute, exécutez la requête sans group by pour un exemple d'école.
  • Vous devez associer la sous-requête à la requête externe avec quelque chose comme inner_schools.id = outer_schools.id
  • Mais pour autant que je sache, vous n'avez pas du tout besoin d'une sous-requête

Par exemple :

SELECT  schools.*
,       sum(cashflows.amount) total_branding_cashflow
FROM    schools
JOIN    seasons
ON      seasons.school_id = schools.id 
        and seasons.year = 2010
JOIN    cashflows
ON      cashflows.season_id = seasons.id 
        and cashflow_group_id = 12
GROUP BY 
        schools.id 
HAVING  total_branding_cashflow BETWEEN 50000000 AND 100000000

Pour plusieurs catégories, vous pouvez utiliser un cas :

SELECT  schools.*
,       sum(case when cashflow_group_id = 1 then cashflows.amount end) total1
,       sum(case when cashflow_group_id = 12 then cashflows.amount end) total12
FROM    schools
JOIN    seasons
ON      seasons.school_id = schools.id 
        and seasons.year = 2010
JOIN    cashflows
ON      cashflows.season_id = seasons.id 
GROUP BY 
        schools.id