錯誤案例:
-- 統計學校表school中性别字段student_sex(student_sex取值為girl或者boy)的女生總人數
SUM(student_sex = "girl") AS "女學生總數"; -- 這裡會報錯,SUM函數的參數不正确
解決方式:
-- 統計學校表school中性别字段student_sex(student_sex取值為girl或者boy)的女生總人數
SUM(student_sex = "girl") AS "女學生總數"; -- 這裡會報錯,SUM函數的參數不正确
問題2:計算函數or聚合函數的字段平級,導緻分辨不出彼此的别名問題
SELECT
COUNT(*) AS total, -- 學校的學生總數
SUM(CASE WHEN student_sex = 'girl' THEN 1 ELSE 0 END) AS girls, -- 計算女生總數
SUM(CASE WHEN student_sex = 'boy' THEN 1 ELSE 0 END) AS boys, -- 計算男生總數
(sch.boys / stu.total) AS "學校中男生所占的比例"
FROM
school sch -- 從學校表中查詢
GROUP BY
student_grade; -- 按照年級分組
如果使用這種方式去查詢,會出現如下報錯問題:
Semantic analysis exception - column stu.boys cannot be resolved
錯誤原因是
stu.boys
字段不能被解析,
SUM()
函數計算出school表中所有男生的總數,并為其其别名為
boys
。
注意:這裡的别名和表的别名
sch
是同級别的,是以不可以使用
sch.boys
的方式去獲得學校男生的總數量!
解決方案:
兩層SELECT嵌套查詢
SELECT
S.total AS "學生總數",
S.boys AS "男生總數",
S.girls AS "女生總數",
(S.boys / S.total) AS "學校中男生所占的比例"
FROM
(
SELECT
COUNT(*) AS total,
SUM(CASE WHEN student_sex = 'girl' THEN 1 ELSE 0 END) AS girls, -- 計算女生總數
SUM(CASE WHEN student_sex = 'boy' THEN 1 ELSE 0 END) AS boys, -- 計算男生總數
FROM
school sch -- 從學校表中查詢,表别名為sch
GROUP BY
student_grade; -- 按照年級分組
) S;
這樣就可以正常查詢啦!