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;

这样就可以正常查询啦!


相关文章
|
1月前
|
SQL 存储 数据库
SQL部分字段编码设置技巧与方法
在SQL数据库管理中,设置字段的编码对于确保数据的正确存储和检索至关重要
|
1月前
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
|
30天前
|
SQL 存储 Serverless
SQL语句拆分时间字段的技巧与方法
在数据库操作中,经常需要处理时间数据
|
1月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
1月前
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
|
1月前
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
1月前
|
SQL Oracle 关系型数据库
SQL如何添加字段记录:详细步骤与技巧
在数据库管理中,经常需要向已有的表中添加新的字段(列)或向表中插入新的记录
|
1月前
|
SQL 存储 缓存
SQL计算班级语文平均分:详细步骤与技巧
在数据库管理和分析中,经常需要计算某个班级在特定科目上的平均分
|
1月前
|
SQL 存储 数据库
SQL学习一:ACID四个特性,CURD基本操作,常用关键字,常用聚合函数,五个约束,综合题
这篇文章是关于SQL基础知识的全面介绍,包括ACID特性、CURD操作、常用关键字、聚合函数、约束以及索引的创建和使用,并通过综合题目来巩固学习。
32 1
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")

热门文章

最新文章