第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;
相关推荐
香蕉大香蕉(06敬畏市场)5 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
IT规划师7 小时前
百亿数据写入 MySQL:空间降维 × IO 降维 × 工程兜底
mysql·sqlsugar·.net10
数据库小学妹9 小时前
MySQL NULL陷阱:NOT IN、三值逻辑与NOT EXISTS
数据库·后端·mysql
枫昕柚9 小时前
MySQL 建库命令详解:从 CREATE DATABASE 到create table
数据库·mysql
知行产研11 小时前
解读〈工程机械行业“十五五“发展规划〉:从卖整机到卖解决方案
数据库·mysql
香蕉大香蕉(06敬畏市场)12 小时前
MySQL 单点详解(08)
java·数据库·mysql·面试·八股
李纲明14 小时前
WordPress 报建立数据库连接时出错:先核 wp-config 四元组,再查 MySQL 服务与表修复
运维·数据库·mysql·wordpress·排障·devdiy
2401_8818283214 小时前
MySQL操作命令
android·mysql·adb
鸢尾掠地平14 小时前
MySQL之DML(含例子)
数据库·mysql