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

MySQL:somar valores em subconsultas


Algumas sugestões:
  • Participe em seasons uma vez. Uma junção faz com que as linhas da tabela à esquerda sejam duplicadas, para que possam ser somadas duas vezes pela sum agregar. Em caso de dúvida, execute a consulta sem group by para uma escola de exemplo.
  • Você teria que relacionar a subconsulta à consulta externa com algo como inner_schools.id = outer_schools.id
  • Mas até onde posso ver, você não precisa de uma subconsulta

Por exemplo:
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

Para várias categorias, você pode usar um caso:
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