SQL筛选含交互5、10且无20的会话后按地区统计数量
SQL查询实现方案
核心思路
先按session+location分组筛选满足条件的会话,再按location分组统计对应会话数量即可。筛选会话的核心条件为:
- 包含
interaction=5的记录 - 包含
interaction=10的记录 - 包含
interaction=20的记录(注:你的问题描述里条件写反了,根据预期输出,实际要求是存在20而非不存在)
通用SQL实现(适配绝大多数数据库)
SELECT location, COUNT(DISTINCT session) AS count FROM ( -- 内层查询筛选符合条件的会话 SELECT location, session FROM 你的表名 -- 替换为实际表名 GROUP BY location, session HAVING SUM(CASE WHEN interaction = 5 THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN interaction = 10 THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN interaction = 20 THEN 1 ELSE 0 END) > 0 ) AS valid_sessions GROUP BY location;
实现逻辑说明
- 内层子查询按
location和session分组,通过SUM+CASE的组合判断每个会话是否同时存在三个指定的交互值,只有三个判断结果都大于0的会话会被保留 - 外层查询基于内层筛选出的有效会话,按
location分组统计每个地区的会话数量
按你提供的测试数据执行后,返回结果和你预期完全一致:
| location | count |
|---|---|
| us | 2 |
| de | 1 |
fr的会话mno因为缺少interaction=20的记录,会被内层查询过滤,不会纳入统计。
内容的提问来源于stack exchange,提问作者codearoni
相关产品推荐
相关产品推荐

