1. 程式人生 > >MySQL select 子查詢複用,進行聚合計算

MySQL select 子查詢複用,進行聚合計算

當對一個複雜的子查詢結果進行分組(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 函式複用只適用於特定情況,別的希望子查詢複用,可以使用臨時表