第8篇:《CASE WHEN 是 SQL 的"如果说"——教你把数据分类打标签》

🎬 开场白:数据也得贴标签,才好讲人话

日常生活中我们经常会说:

  • "这个房租太高了!"
  • "这房子属于中等价位。"
  • "太便宜了,有猫腻。"

这些评价,其实就是对数据打标签。

在 SQL 里,我们用一个非常强大的工具来实现这种逻辑判断:
CASE WHEN:SQL 里的"如果说......否则......"


1️⃣ 什么是 CASE WHEN?

它是 SQL 里的"判断语句"。
语法结构

sql 复制代码
CASE
  WHEN 条件1 THEN 结果1
  WHEN 条件2 THEN 结果2
  ELSE 默认结果
END

它可以出现在 SELECT 里作为"字段",也能出现在 ORDER BY、WHERE 等位置。


2️⃣ 示例表:houses 房源表

house_id title price district
1 精装一房 1800 天河
2 电梯两房 2500 越秀
3 合租三房 2000 天河
4 豪华复式 3600 海珠
5 简装单间 1500 越秀

3️⃣ 用 CASE WHEN 给房子分类

✅ 按价格分档(低/中/高):

sql 复制代码
SELECT title, price,
  CASE
    WHEN price < 1800 THEN '便宜'
    WHEN price BETWEEN 1800 AND 2500 THEN '中等'
    ELSE '昂贵'
  END AS 价格档位
FROM houses;

结果

title price 价格档位
精装一房 1800 中等
电梯两房 2500 中等
合租三房 2000 中等
豪华复式 3600 昂贵
简装单间 1500 便宜

4️⃣ 用 CASE WHEN 做复杂字段的展示

✅ 显示"推荐语"字段(根据价格+区域)

sql 复制代码
SELECT title, price, district,
  CASE
    WHEN price > 3000 THEN '高端精选'
    WHEN district = '天河' THEN '位置优越'
    ELSE '性价比之选'
  END AS 推荐语
FROM houses;

5️⃣ 和聚合函数搭配使用

✅ 看各区平均租金,是否高于全市平均

sql 复制代码
SELECT district, AVG(price) AS avg_price,
  CASE
    WHEN AVG(price) > (
      SELECT AVG(price) FROM houses
    ) THEN '高于平均'
    ELSE '低于平均'
  END AS 对比情况
FROM houses
GROUP BY district;

📌 注意:在 GROUP BY 语句中使用 CASE 时,要结合聚合函数一起判断。


🧠 CASE WHEN 口诀

sql 复制代码
CASE WHEN 是判断王,
语法像 if 来帮忙。
一层一层设条件,
分类打标最在行。

组合逻辑搭聚合,
动态字段都能扛。

🛠 小练习题

1. 按价格将房子分为"低、中、高"

sql 复制代码
SELECT title, price,
  CASE
    WHEN price < 2000 THEN '低'
    WHEN price <= 3000 THEN '中'
    ELSE '高'
  END AS 价位
FROM houses;

2. 给每套房生成一句"推荐语"

sql 复制代码
SELECT title, district, price,
  CASE
    WHEN district = '天河' AND price <= 2000 THEN '通勤之选'
    WHEN district = '海珠' THEN '生活便利'
    ELSE '适合预算党'
  END AS 推荐标签
FROM houses;
相关推荐
2301_772093567 小时前
tuchuang_后端_前端_注册登录
数据库·后端·网络协议·mysql·wireshark
K_i1347 小时前
中国电信用户行为实时分析系统运维实战
hadoop·mysql
武子康7 小时前
Java-141 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(3)
java·数据库·mysql·spring·性能优化·系统架构·事务
努力学习的小廉11 小时前
初识MYSQL —— 数据类型
android·数据库·mysql
William_cl12 小时前
【连载3】MySQL 的 MVCC 机制剖析
数据库·mysql
2351612 小时前
【MySQL】MVCC:从核心原理到幻读解决方案
java·数据库·后端·sql·mysql·缓存
Raymond运维15 小时前
MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
linux·数据库·mysql
菲兹园长18 小时前
MySql(SQL)
数据库·sql·mysql
一只小bit18 小时前
MySQL表的操作:创建—修改—删除流程解析
数据库·mysql·oracle
学编程的小鬼18 小时前
MySQL的快速入门
数据库·mysql