Một số gợi ý:
- Tham gia vào
seasons
Một lần. Một phép nối làm cho các hàng từ bảng bên trái bị trùng lặp, vì vậy chúng có thể được cộng lại hai lần bằngsum
tổng hợp. Khi nghi ngờ, hãy chạy truy vấn mà không có nhómgroup by
cho một trường học ví dụ. - Bạn phải liên kết truy vấn con với truy vấn bên ngoài bằng một thứ như
inner_schools.id = outer_schools.id
- Nhưng theo những gì tôi có thể thấy, bạn không cần một truy vấn con nào cả
Ví dụ:
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
Đối với nhiều danh mục, bạn có thể sử dụng một trường hợp:
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