MySQL select 子查詢複用,進行聚合計算
阿新 • • 發佈:2019-02-14
當對一個複雜的子查詢結果進行分組(group by)聚合計算時,
有時需要進行多次聚合,如果不能複用自查尋的結果,查詢效率會很低下
在有些情況下,可以使用 IF 函式進行不同條件的聚合
示例如下:
假設子查詢的結果有班級,學號,平均分這3個欄位(class, no, score)
現在想求每個班級的總人數和及格人數
複用前:
select A.class A.sum, B.sum
from
(select class, count(1) as sum from (SUB_QUERY) S group by class) A
left join
(select class, count (1) as sum from (SUB_QUERY) S where S.score >= 60 group by class) B
on A.class = B.class
可以看出,需要查詢 SUB_QUERY 兩次
複用後:
select S.class, count(1), sum(IF(S.score >= 60, 1, 0))
from
(SUB_QUERY) S
group by S.class
可以看出,子查詢只有一次,而且 SQL 更簡潔
結論:使用 IF 函式複用只適用於特定情況,別的希望子查詢複用,可以使用臨時表