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

如何从Data表筛选对question_id 1、2、3均作答0的customer_id

解决方法:筛选对指定问题全答0的用户

嘿,我懂你遇到的问题了——你原来写的SQL只是找出了那些至少对1、2、3里某一个问题答了0的用户,但没保证这三个问题他们全都答了0,甚至可能有的用户只答了其中两个问题(且都是0),或者某个问题答了1但另一个答了0,都会被误选进来。这就是为什么结果不符合预期的原因。

给你几种靠谱的解决方案,按需选就行:

方法1:GROUP BY + HAVING(最推荐,扩展性强)

这是处理这类“全满足”条件最常用的方式,逻辑清晰还能应对后续增加问题的情况:

SELECT customer_id
FROM Data
WHERE question_id IN (1, 2, 3)
GROUP BY customer_id
HAVING COUNT(DISTINCT question_id) = 3  -- 确保用户确实答了这三个问题
   AND SUM(value) = 0;  -- 所有作答值都是0,总和才会是0

补充说明:

如果你的value字段可能出现负数(比如除了0还有-1这种情况),那把SUM(value) = 0换成MAX(value) = 0 AND MIN(value) = 0更稳妥,这样能确保所有记录的value都是0。

方法2:排除法(用NOT EXISTS)

思路是先找出所有没有对这三个问题答非0的用户,同时确保他们确实答了全部三个问题:

SELECT DISTINCT customer_id
FROM Data d_main
WHERE question_id IN (1, 2, 3)
AND NOT EXISTS (
    SELECT 1
    FROM Data d_sub
    WHERE d_sub.customer_id = d_main.customer_id
      AND d_sub.question_id IN (1, 2, 3)
      AND d_sub.value != 0
)
GROUP BY customer_id
HAVING COUNT(DISTINCT question_id) = 3;

方法3:多表JOIN(适合问题数量少的场景)

如果只有三个问题,这种写法非常直观,把每个问题的记录关联起来,确保每个都为0:

SELECT d1.customer_id
FROM Data d1
JOIN Data d2 ON d1.customer_id = d2.customer_id 
             AND d2.question_id = 2 
             AND d2.value = 0
JOIN Data d3 ON d1.customer_id = d3.customer_id 
             AND d3.question_id = 3 
             AND d3.value = 0
WHERE d1.question_id = 1 
  AND d1.value = 0;

这几种方法都能帮你精准筛选出customer_id=24这个正确结果,试试吧!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:27:42