第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;
相关推荐
wei38724523236 分钟前
集训总结2
java·数据库·mysql
钊兵8 小时前
mysql时间处理函数和操作笔记
数据库·笔记·mysql
掘根8 小时前
【MySQL数据库备份与恢复1】二进制日志,mysqlbinlog
数据库·mysql
midsummer_woo10 小时前
基于springboot的在线教育系统(源码+论文)
vue.js·spring boot·mysql
烙印60111 小时前
MySQL的底层原理--InnoDB记录存储结构
数据库·mysql
我命由我1234514 小时前
PostgreSQL 保留关键字冲突问题:语法错误 在 “user“ 或附近的 LINE 1: CREATE TABLE user
数据库·后端·sql·mysql·postgresql·问题·数据库系统
Heliotrope_Sun16 小时前
MySQL常见命令
数据库·mysql
卖男孩的小火柴.18 小时前
MySQL
数据库·mysql·oracle
Ice__Cai18 小时前
Django Models详解:数据库模型的核心
数据库·python·sql·mysql·django
zhoupenghui16819 小时前
Mysql大数据架构设计:当表中数据超过800万时,对数据表进行分表操作,以及分页查询优化详解
数据库·mysql·大数据分页·seek·全局索引表·二次查询法