sql >> Databáze >  >> RDS >> Mysql

MySQL:Součet hodnot v poddotazech

Několik návrhů:

  • Připojte se v seasons jednou. Spojení způsobí, že řádky z levé tabulky jsou duplikovány, takže je lze sečíst dvakrát pomocí sum agregát. V případě pochybností spusťte dotaz bez group by pro příklad školy.
  • Museli byste propojit poddotaz s vnějším dotazem pomocí něčeho jako inner_schools.id = outer_schools.id
  • Pokud však vidím, poddotaz vůbec nepotřebujete

Například:

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

Pro více kategorií můžete použít případ:

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. Scénáře zálohování a obnovy MySQL Cloud pomocí Microsoft Azure

  2. Migrace databází do Azure SQL Database

  3. Chcete-li SHA512-hash heslo v databázi MySQL pomocí Pythonu

  4. Jak volat uloženou proceduru MySQL v Pythonu