You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL按order_number分组查完全删除订单 存在date_deleted为null就返回null的方法

原SQL错误原因

你写的SQL首先在WHERE子句过滤了date_deleted IS NOT NULL的行,直接把同订单下未删除的商品(date_deleted为null)排除在了分组统计范围外,分组时无法感知到还有未删除的商品,自然得到错误结果。

实现需求的正确SQL

你可以在分组后统计组内date_deleted为null的记录数来判断返回值,全数据库兼容的写法如下:

SELECT 
  order_number,
  CASE 
    WHEN COUNT(CASE WHEN date_deleted IS NULL THEN 1 END) > 0 THEN NULL
    ELSE MAX(date_deleted) 
  END AS date_deleted
FROM orders
GROUP BY order_number

如果使用PostgreSQL/MySQL这类支持逻辑聚合函数的数据库,写法可以更简化:

-- PostgreSQL 版本
SELECT 
  order_number,
  CASE WHEN BOOL_OR(date_deleted IS NULL) THEN NULL ELSE MAX(date_deleted) END AS date_deleted
FROM orders
GROUP BY order_number

仅筛选整单完全删除的订单

如果最终只需要拿到完全删除的订单列表,直接在HAVING子句加过滤条件即可:

SELECT order_number
FROM orders
GROUP BY order_number
HAVING COUNT(CASE WHEN date_deleted IS NULL THEN 1 END) = 0

内容的提问来源于stack exchange,提问作者Nameer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:45:01