sql >> Database >  >> RDS >> Mysql

MySQL:somwaarden in subquery's

Enkele suggesties:

  • Doe mee met seasons eenmaal. Een join zorgt ervoor dat rijen uit de linkertabel worden gedupliceerd, zodat ze twee keer kunnen worden opgeteld met de sum totaal. Voer bij twijfel de query uit zonder group by voor een voorbeeldschool.
  • Je zou de subquery moeten relateren aan de buitenste query met iets als inner_schools.id = outer_schools.id
  • Maar voor zover ik kan zien, heb je helemaal geen subquery nodig

Bijvoorbeeld:

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

Voor meerdere categorieën kunt u een case gebruiken:

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 



  1. Sorteren vermijden met Samenvoegen Samenvoegen Samenvoegen

  2. Voordelen van het leren van nieuwe DB-systemen

  3. Hoe NULLIF() werkt in SQL Server

  4. Groepsgewijs maximaal