当前位置: 首页 > news >正文

数据库函数详解:COALESCE 到底有什么用?

在写 SQL 的时候,我们经常会遇到这样的场景:
有些字段的值可能是 NULL,但我们希望结果里总能返回一个“靠谱的值”。这时候,COALESCE 就能派上用场。


1. COALESCE 是什么?

COALESCE(expr1, expr2, expr3, …)
👉 它的作用是 从左到右依次判断参数,返回第一个不是 NULL 的值

换句话说:

  • 如果 expr1 有值(不是 NULL),返回 expr1
  • 否则返回 expr2
  • 如果前两个都是 NULL,就返回 expr3
  • 以此类推。

这在处理默认值、兜底逻辑的时候特别常用。


2. 基础示例

假设我们有一张商品表 product,里面有两个字段:

  • sale_price:销售价格
  • purchase_price:采购价格

还有一张单独价格表 product_price

  • price:给某个客户/供应商设置的单独价格(可能为空)

现在我们执行 SQL:

SELECT COALESCE(price.price, p.sale_price) AS final_price
FROM product p
LEFT JOIN product_price price ON p.id = price.product_id;
  • 如果 price.price = 120 → 返回 120 (优先用单独设置的价格)
  • 如果 price.price = NULLp.sale_price = 100 → 返回 100
  • 如果两个都为 NULL → 返回 NULL

是不是很直观?


3. 和 CASE WHEN 对比

我们不使用 COALESCE 的话,通常写成这样:

CASE WHEN price.price IS NOT NULL THEN price.priceELSE p.sale_price
END AS final_price

看起来就比较啰嗦。
而用 COALESCE

COALESCE(price.price, p.sale_price) AS final_price

一行搞定,简洁明了。


4. 在实际业务中的应用

比如你要写一个接口,返回商品的价格。
需求是:

  • 如果是客户,优先返回客户的单独价格,否则返回销售价格。
  • 如果是供应商,优先返回供应商的单独价格,否则返回采购价格。

SQL 可以写成:

CASE WHEN #{partnerType} = 1 THEN COALESCE(price.price, p.sale_price) WHEN #{partnerType} = 2 THEN COALESCE(price.price, p.purchase_price) ELSE NULL
END AS price

这样就能保证:

  • 有单独价格时,返回单独价格;
  • 没有单独价格时,返回默认价格;
  • 逻辑清晰,代码简洁。

5. 总结

  • 记忆口诀COALESCE(a, b) = 如果 a 不为空,就返回 a,否则返回 b
  • 优点:简洁、可读性强,替代冗长的 CASE WHEN
  • 适用场景:字段可能为 NULL 时,设置默认值或兜底逻辑。

💡 一句话总结
COALESCE 是 SQL 里的“兜底神器”,帮你在 NULL 值面前永远不至于掉链子。



文章转载自:

http://sTh759mB.pbzgj.cn
http://D89JhN1A.pbzgj.cn
http://iVl3cpeg.pbzgj.cn
http://6pFxoj8f.pbzgj.cn
http://UJOJUAkY.pbzgj.cn
http://dDNDo8k9.pbzgj.cn
http://kPCTjAO6.pbzgj.cn
http://9CxTOPSW.pbzgj.cn
http://SGCwcNdd.pbzgj.cn
http://mf6hYzDV.pbzgj.cn
http://3A3ERrev.pbzgj.cn
http://asmDrQ3c.pbzgj.cn
http://2fEpeuv4.pbzgj.cn
http://Ak3fXVtn.pbzgj.cn
http://FqFwQAqq.pbzgj.cn
http://nMw3Ptbh.pbzgj.cn
http://2h9nARVA.pbzgj.cn
http://SG6q4ZLV.pbzgj.cn
http://qsntye5W.pbzgj.cn
http://FPwlOVYd.pbzgj.cn
http://Nv8kjlex.pbzgj.cn
http://UatMzXhU.pbzgj.cn
http://Nqyayn9e.pbzgj.cn
http://e6H0wWcz.pbzgj.cn
http://ee4tVtoq.pbzgj.cn
http://FKpJWOh1.pbzgj.cn
http://PtKBVU1v.pbzgj.cn
http://yMTDnjUP.pbzgj.cn
http://88lNsxrv.pbzgj.cn
http://F1WLQMyq.pbzgj.cn
http://www.dtcms.com/a/365436.html

相关文章:

  • 微硕WINSOK超低阻抗MOS管 WSD30100DN56在汽车高性能系统中的应用
  • Ubuntu22.04中使用cmake安装abseil-cpp库
  • oracle 从一张表更新到另外一张表的方法(MERGE)
  • java面试:可以讲解一下mysql的索引吗
  • 部署MYSQL主从同步超详细过程
  • Kafka面试精讲 Day 6:Kafka日志存储结构与索引机制
  • 【stm32】定时器中断与定时器外部时钟
  • RTSP流端口占用详解:TCP模式与UDP模式的对比
  • 首届中国AI项目管理大会成功召开圆满闭幕!
  • 【BigWorld 游戏服务器引擎】数据落地方案自动化详解,及Java实现方案的探索
  • 关于ES中文分词器analysis-ik快速安装
  • 理解用户需求
  • word删除指定页面
  • Django get_or_create 方法详解
  • AP5414:高效灵活的LED驱动解决方案,点亮创意生活
  • LangGraph MCP智能体开发
  • Docker学习笔记(一):容器基础、生态与安装实践
  • XSENS VISION NAVIGATOR助力智能城市自动化清洁机器人精确导航
  • 深度学习三大框架对比评测:PaddlePaddle、PyTorch 与 TensorFlow
  • 【2025ICCV】基于 ​CL-Splats​ 的3D高斯溅射模型
  • 第二家公司虽然用PowerBI ,可能更适合用以前的QuickBI
  • TypeScript 与 Java 重载机制对比
  • WebAppClassLoader(Tomcat)和 LaunchedURLClassLoader(Spring Boot)类加载器详解
  • “路桥养护”--奏响城市交通的安全乐章
  • 前端框架(Vue/React):界面更新的运行链路
  • Kafka Topic(主题)详解
  • 四维轻云:多期地理数据管理的得力助手
  • 14,FreeRTOS二值信号量操作
  • 差分隐私在运营指标:ABP 的 DP 计数器与噪声预算
  • 一文读懂RAG:从生活场景到核心逻辑,AI“查资料答题”原来这么简单