错误案例:
-- 统计学校表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;
这样就可以正常查询啦!