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

MySQL:valores de suma en subconsultas

Algunas sugerencias:

  • Únete a las seasons una vez. Una combinación hace que las filas de la tabla de la izquierda se dupliquen, por lo que se pueden sumar dos veces mediante sum agregar. En caso de duda, ejecute la consulta sin group by para una escuela de ejemplo.
  • Tendría que relacionar la subconsulta con la consulta externa con algo como inner_schools.id = outer_schools.id
  • Pero por lo que puedo ver, no necesita una subconsulta en absoluto

Por ejemplo:

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 varias categorías, podría usar un 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