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

求编写SQL查询:仅返回所有服务EXECUTED_VALUE非空的供应商

解决方案:筛选所有服务EXECUTED_VALUE均非空的供应商

方法一:使用NOT EXISTS子查询(推荐,性能通常更优)

这个方法直接过滤掉存在任何executed_value为NULL服务的供应商:

SELECT DISTINCT f.supplier_id, f.supplier_name
FROM supplier f
WHERE NOT EXISTS (
    SELECT 1
    FROM service s
    WHERE s.id_supplier = f.id_supplier
      AND s.executed_value IS NULL
);

逻辑说明:

  • 子查询检查当前供应商是否存在一条服务记录的executed_value为NULL
  • NOT EXISTS确保只返回完全没有这类记录的供应商
  • DISTINCT保证最终结果没有重复的供应商条目

方法二:使用GROUP BY + HAVING

通过分组统计来验证所有服务的executed_value均非空:

写法1:统计null的数量为0

SELECT f.supplier_id, f.supplier_name
FROM supplier f
JOIN service s ON f.id_supplier = s.id_supplier
GROUP BY f.supplier_id, f.supplier_name
HAVING COUNT(CASE WHEN s.executed_value IS NULL THEN 1 END) = 0;

写法2:对比有效值数量与总服务数量

SELECT f.supplier_id, f.supplier_name
FROM supplier f
JOIN service s ON f.id_supplier = s.id_supplier
GROUP BY f.supplier_id, f.supplier_name
HAVING COUNT(s.executed_value) = COUNT(s.id_supplier);

逻辑说明:

  • COUNT(s.executed_value)会自动忽略NULL值,统计的是该供应商executed_value非空的服务数量
  • COUNT(s.id_supplier)统计的是该供应商的所有服务数量
  • 当两者相等时,说明所有服务的executed_value都不为NULL

关于你尝试COUNT函数未成功的说明

如果之前用了COUNT(*),它会把包含NULL的记录也统计进去,无法区分有效值和空值,所以得不到正确结果。上面的两种HAVING写法都是针对空值做了针对性统计,能解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:52:52