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

如何用SQL筛选Walmart供应商中符合特定条件的唯一项目

筛选符合条件的Walmart项目SQL实现

需求说明

我有一个包含多家供应商project(项目)的数据集,每个项目包含数百个不同objective(目标),结果状态为achieved(已完成)或unrealised(未实现)。部分目标会在第二列external_objective(外部目标)中列出,该列数据来自另一数据源。

需要生成供应商Walmart的唯一project列表,满足以下条件:

  • 项目中所有标记为achieved的目标,必须同时存在于objective和external_objective列中(即两列值相等且非空)
  • 项目中unrealised目标的存在不影响结果,但如果项目存在任何未同时出现在两列的achieved目标,该项目需被排除

数据集示例

projectobjectiveexternal_objectivestatus
b12345abcdefabcdefachieved
c23456abcdegachieved
d23456bbcdvgunrealised
b12345ghfjdsachieved
d23456fghjkafghjkaachieved

预期结果

仅选中项目d23456,排除b12345和c23456。

原SQL问题分析

你当前编写的SQL存在逻辑缺陷:

SELECT DISTINCT Project 
FROM dataset
WHERE supplier="walmart" AND 
status = "achieved" AND objectives IS NOT NULL AND external_objectives IS NOT NULL 
GROUP BY project
  • 该语句仅筛选出存在至少一个符合条件的achieved目标的项目,但无法保证项目中所有achieved目标都满足条件
  • 例如项目b12345有一个符合条件的achieved目标,但另一个achieved目标不符合,原语句会错误地将其包含进来

正确SQL实现方案

方案一:使用HAVING子句排除不合格项目

SELECT project
FROM dataset
WHERE supplier = 'walmart'
GROUP BY project
HAVING 
  -- 确保所有achieved的目标都满足objective和external_objective匹配且非空
  SUM(
    CASE 
      WHEN status = 'achieved' AND (objective != external_objective OR objective IS NULL OR external_objective IS NULL) 
      THEN 1 
      ELSE 0 
    END
  ) = 0

方案二:使用NOT EXISTS排除存在不合格目标的项目

SELECT DISTINCT d1.project
FROM dataset d1
WHERE 
  d1.supplier = 'walmart'
  AND NOT EXISTS (
    SELECT 1
    FROM dataset d2
    WHERE 
      d2.project = d1.project
      AND d2.status = 'achieved'
      AND (d2.objective != d2.external_objective OR d2.objective IS NULL OR d2.external_objective IS NULL)
  )

逻辑说明

两种方案核心逻辑一致:

  1. 聚焦Walmart的项目
  2. 检查项目中是否存在任何不符合要求的achieved目标(即objective和external_objective不匹配或任一为空)
  3. 仅保留不存在这类不合格目标的项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:00:25