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

SQL筛选条件添加:如何获取仅在store_id 1消费的用户

解决思路与SQL写法

核心逻辑是:我们要找的是所有消费记录里只有store_id=1的用户,不是只筛选出在store_id=1消费过的记录——后者会包含那些同时在其他门店消费的用户,所以得从用户维度去判断。

这里给你几种实用的写法:

方法1:分组后通过聚合条件筛选

按用户分组,确保该用户的所有消费记录里,门店ID的最小值和最大值都是1(说明没有其他门店的记录):

SELECT user_id
FROM your_consumption_table -- 替换成你的表名
GROUP BY user_id
HAVING MIN(store_id) = 1 AND MAX(store_id) = 1;

如果门店ID可能有非数字的情况,也可以用COUNT(DISTINCT store_id) = 1 AND MIN(store_id) = 1,逻辑是一样的——用户只有唯一的门店记录,且这个门店是1。

方法2:子查询排除有其他门店消费的用户

先找出所有在store_id=1消费过的用户,再排除掉那些在其他门店有消费记录的用户:

SELECT DISTINCT user_id
FROM your_consumption_table
WHERE store_id = 1
AND user_id NOT IN (
    SELECT user_id
    FROM your_consumption_table
    WHERE store_id != 1
);

如果你的表中有NULL值,NOT IN可能会有问题,这时候可以改用NOT EXISTS:

SELECT DISTINCT t1.user_id
FROM your_consumption_table t1
WHERE t1.store_id = 1
AND NOT EXISTS (
    SELECT 1
    FROM your_consumption_table t2
    WHERE t2.user_id = t1.user_id AND t2.store_id != 1
);

NOT EXISTS的性能通常比NOT IN更稳定,尤其是在数据量较大的时候。

方法3:LEFT JOIN过滤无其他门店记录的用户

通过左关联自身表,筛选出那些在其他门店没有匹配记录的用户:

SELECT DISTINCT t1.user_id
FROM your_consumption_table t1
LEFT JOIN your_consumption_table t2
ON t1.user_id = t2.user_id AND t2.store_id != 1
WHERE t1.store_id = 1 AND t2.user_id IS NULL;

逻辑是:把在门店1消费的用户,和他们在其他门店的消费记录关联,关联不到(t2.user_id为NULL)的,就是没有其他门店消费的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:50:17