基于FlowType规则按Belong分组统计Target关联计数的SQL实现
问题描述
我的数据表:
| ID | Target | Belong | FlowType |
|---|---|---|---|
| 1 | 1 | 3 | 1 |
| 2 | 3 | 1 | 3 |
| 3 | 1 | 3 | 1 |
需按Belong分组统计有效关联计数,规则如下:
- FlowType = 1:关联记录,计数+1
- FlowType = 3:退回记录,计数-1
- 仅保留最终计数大于0的分组
示例说明
- 原数据表总有效计数为1(2条关联记录 - 1条退回记录);若移除ID=3的记录,总有效计数为0(1条关联记录 - 1条退回记录)。
- 新增以下记录后:
| ID | Target | Belong | FlowType |
|---|---|---|---|
| 5 | 1 | 6 | 1 |
总有效计数为2(3条关联记录 - 1条退回记录),按Belong分组的期望结果为:
| Belong | Count |
|---|---|
| 3 | 1 |
| 6 | 1 |
SQL框架补全方案
符合你提供的框架的写法
select s.Belong, (select sum(case when s1.FlowType = 1 then 1 when s1.FlowType = 3 then -1 else 0 end) from MyTable s1 where s1.Belong = s.Belong) as Count from MyTable s group by s.Belong having Count > 0;
更简洁的优化写法
select Belong, sum(case FlowType when 1 then 1 when 3 then -1 else 0 end) as Count from MyTable group by Belong having Count > 0;
逻辑说明
两段SQL均会按Belong分组,计算每组内关联记录数减去退回记录数的结果,再通过having子句过滤掉计数≤0的分组,最终得到你期望的统计结果。
内容的提问来源于stack exchange,提问作者user666
相关产品推荐
相关产品推荐

