上一篇
场景引入:
凌晨3点,你正对着销售报表抓狂——老板要求立刻统计“高/中/低”风险订单,而数据库里只有冰冷的金额数字,一个披着SQL外衣的瑞士军刀突然发光:Oracle CASE表达式!✨
SELECT order_id, amount, CASE WHEN amount > 10000 THEN '💰高风险' WHEN amount > 5000 THEN '🟡中风险' ELSE '🟢低风险' END AS risk_level FROM orders;
效果:
| ORDER_ID | AMOUNT | RISK_LEVEL |
|----------|--------|------------|
| 1001 | 12000 | 💰高风险 |
💡 核心要点:
END
收尾 ELSE
兜底) CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ... ELSE 默认结果 END
CASE 字段名 WHEN 值1 THEN 结果1 WHEN 值2 THEN 结果2 ... END
🌰 实例对比:
-- 写法1(范围判断) CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END -- 写法2(精确匹配) CASE department_id WHEN 10 THEN '财务部' WHEN 20 THEN '研发部' ELSE '其他部门' END
SELECT CASE WHEN age < 20 THEN '00后' WHEN age < 30 THEN '90后' ELSE '前辈' END AS generation, COUNT(*) AS user_count FROM users GROUP BY CASE WHEN age < 20 THEN '00后' WHEN age < 30 THEN '90后' ELSE '前辈' END;
SELECT product_type, AVG(price) AS avg_price, SUM(CASE WHEN is_discount = 'Y' THEN 1 ELSE 0 END) AS discount_items FROM products GROUP BY product_type;
SELECT student_id, MAX(CASE WHEN subject = '数学' THEN score ELSE NULL END) AS math_score, MAX(CASE WHEN subject = '英语' THEN score ELSE NULL END) AS english_score FROM exam_results GROUP BY student_id;
性能陷阱:
语法雷区:
-- 错误!缺少END SELECT CASE WHEN 1=1 THEN 'yes' FROM dual; -- 错误!THEN类型不一致 SELECT CASE WHEN 1=1 THEN '文本' ELSE 0 END FROM dual;
NULL处理:
-- 特别注意:WHEN NULL THEN... 永远不成立! CASE WHEN column IS NULL THEN '空值' -- ✅正确写法 WHEN column = NULL THEN... -- ❌永远不执行 END
需求:给不同级别客户打标签,且VIP客户显示联系方式
SELECT customer_name, CASE WHEN vip_level = 'PLATINUM' THEN '👑铂金客户-' || phone WHEN vip_level = 'GOLD' THEN '⭐黄金客户' WHEN order_count > 10 THEN '🔹活跃客户' ELSE '普通客户' END AS customer_tag, last_order_date FROM customers;
输出示例:
CUSTOMER_NAME | CUSTOMER_TAG | LAST_ORDER_DATE
--------------|--------------------|----------------
张三 | 👑铂金客户-13800138000 | 2025-07-15
李四 | ⭐黄金客户 | 2025-08-02
✨ 终极提示:
Oracle 23c开始支持CASE
表达式内直接调用AI函数(如AI_DETECT_SENTIMENT
),未来甚至可以这样写:
CASE WHEN AI_IS_FRAUD(order_id) = 1 THEN '🚨拦截' ELSE '通过' END
现在就去用CASE拯救你的复杂查询吧!遇到问题时记住——这不过是SQL在对你眨眼睛说:“我可以更智能哦~” 😉
本文由 丛觅柔 于2025-08-03发表在【云服务器提供商】,文中图片由(丛觅柔)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/525934.html
发表评论