SQL踩坑:计算函数or聚合函数的字段平级,导致分辨不出彼此的别名问题

简介: 问题1:SUM()函数使用小技巧

错误案例:

-- 统计学校表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;

这样就可以正常查询啦!


相关文章
|
7天前
T-sql 高级查询( 5*函数 联接 分组 子查询)
T-sql 高级查询( 5*函数 联接 分组 子查询)
|
1月前
|
SQL 关系型数据库 MySQL
MYSQL数字函数实操宝典:场景化SQL语句一网打尽
本文作为MYSQL数字函数实操宝典,通过丰富的场景化SQL语句实例,一网打尽了MYSQL中常用的数字函数。我们深入探讨了ROUND函数在金额四舍五入、评分计算等场景的应用,展现了其在确保数据准确性和展示规范性方面的重要性。同时,FLOOR函数在分页处理、价格计算等实际案例中的灵活运用,也体现了其在向下取整方面的优势。此外,CEIL函数在分页处理、费用计算等方面的应用案例,充分展示了其向上取整的功能特点。这些实用案例不仅有助于读者更好地理解MYSQL数字函数的工作原理,更为开发者在实际开发中提供了有价值的参考
46 8
|
2月前
|
SQL
SQL语句两个字段或多个字段同时order by 排序
SQL语句两个字段或多个字段同时order by 排序
41 0
|
2月前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
2月前
|
SQL 关系型数据库 数据处理
详解SQL语句中的GROUP BY和聚合函数COUNT、SUM、AVG、MIN和MAX。
详解SQL语句中的GROUP BY和聚合函数COUNT、SUM、AVG、MIN和MAX。
35 0
|
2月前
|
SQL 存储 Apache
在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
【2月更文挑战第16天】在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
212 2
|
3月前
|
SQL 存储
SQL Server基本函数
SQL Server基本函数
|
3月前
|
SQL 安全 关系型数据库
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
38 0