SQL CASE WHEN高级应用:评分转换与复杂统计

2 下载量 54 浏览量 更新于2024-08-30 收藏 266KB PDF 举报
本文主要探讨SQL中的CASE...WHEN...函数在不同场景下的高级应用。首先,我们了解了CASE函数的基本语法,它类似于Java中的IF...ELSE语句,用于根据指定的条件返回不同的值。CASE...WHEN结构包含一个或多个条件分支,每个分支对应一个结果,当满足某个条件时,返回该条件的结果。 1. 场景一:计算评分等级,如score=60为及格,score>=80为优秀。通过SQL语句如`SELECT STUDENT_NAME, CASE WHEN score = 60 THEN '及格' WHEN score >= 80 THEN '优秀' ELSE '不及格' END AS grade`,可以轻松地将分数映射为评语。 2. 场景二:统计班级男女学生以及及格人数。例如,通过`SELECT gender, CASE WHEN score >= 60 THEN '及格' ELSE '不及格' END AS status, COUNT(*) AS count FROM students GROUP BY gender`,可以分别统计男女生中及格的人数。 3. 场景三:行转列(pivot)和聚合函数的结合,用于统计城市间的水、电、热消耗总量。这可能需要使用`CASE`与`GROUP BY`和聚合函数(如SUM)一起,如`SELECT city, '水耗' AS type, SUM(consumption) FROM table GROUP BY city, type`,将每一类消耗单独汇总。 4. 场景四:CASE...WHEN用于子查询计算成本,根据城市的用电量和分档电价。比如,`SELECT city, CASE WHEN usage <= 100 THEN price1 ELSE (usage > 100 AND usage <= 200 ? price2 : price3) END AS cost`,根据用电量的不同范围应用不同的电价。 5. 场景五:结合MAX聚合函数的面试题,可能涉及到查找某个最大值对应的结果。例如,`SELECT MAX(score), CASE WHEN score = MAX(score) THEN '最高分' ELSE '非最高分' END AS top_score FROM scores`,找出最高分并标记为“最高分”。 CASE...WHEN不仅用于基本的数据映射,还可以与其他SQL功能(如聚合函数、分组、子查询)结合,解决复杂的业务问题,提高数据处理的灵活性和准确性。掌握这个函数对于理解和优化SQL查询至关重要。