sql - 列的总和和行之间的列表差异
问题描述
我正在尝试根据下表中的 SELL_ID 分组来获取行之间的差异,
table1 -(表格格式由GitHub提供)
+---------+---------+----------+----------+------------------+---------+
| seq_ID | REQ_ID | CALL_ID | SELL_ID | REGION | COUNT |
+---------+---------+----------+----------+------------------+---------+
| 1 | 123 | C001 | S1 | AGL | 510563 |
| 2 | 123 | C001 | S1 | USL | 122967 |
| 3 | 123 | C001 | S1 | VALIC | 614106 |
| 4 | 123 | C001 | S2 | Inforce | 1247636 |
| 5 | 123 | C001 | S2 | NB | 0 |
| 6 | 123 | C001 | S3 | Seriatim Summary | 1247636 |
+---------+---------+----------+----------+------------------+---------+
我试图得到如下结果,
表2 -
+---------+---------+----------+----------+-------+
| seq_ID | REQ_ID | CALL_ID | Summary | COUNT |
+---------+---------+----------+----------+-------+
| 1 | 123 | C001 | S1_vs_S2 | 0 |
| 2 | 123 | C001 | S2_vs_S3 | 0 |
| 3 | 123 | C001 | S3_vs_s1 | 0 |
+---------+---------+----------+----------+-------+
(sum(count) from table1 where sell_id='S1')
S1_vs_S2 是和之间的区别(sum(count) from table1 where sell_id='S2')
下面是我正在使用的代码,但无法获取结果,
INSERT INTO table2 (SEQ_ID, REQ_ID,call_id,summary,count)
SELECT min(seq_id) seq_id
, req_id
, call_id
, S1_vs_S2
,((SELECT sum(c2) FROM TABLE_STG_CTRL WHERE source='S1')-
SELECT sum(c2) FROM TABLE_STG_CTRL WHERE source='S2'))
FROM table1
GROUP BY req_ID, Ctrl_ID, c1, source
ORDER BY SEQ_ID ;
解决方案
这是做你想做的吗?
select req_id, call_id, sell_id,
lead(sell_id) over (partition by req_id, call_id order by seq_id) as next_sell_id,
(cnt -
lead(cnt) over (partition by req_id, call_id order by seq_id)
) as diff
from (select req_id, call_id, sell_id, sum(count) as cnt, min(seq_id) as seq_id
from t
group by req_id, call_id, sell_id
) t
推荐阅读
- javascript - 检测浏览器或标签关闭 - Angular
- python - 创建自增函数
- testing - TestNG 链接坏了?对于 Eclipse 响应代码 410
- javascript - 悬停嵌套的 vue 组件
- ruby - 增量历史记录停止 Ruby 2.7.0 IRB 中的历史记录搜索
- node.js - 在 Next.js/NOW 上本地访问 SSR 和 API 路由的机密
- r - 从字符向量中提取字符串时遇到问题
- python - 如何从张量流数据集中绘制类名?
- postgresql - 如果一列已更改忽略某些列,则执行 PostgreSQL 触发器
- r - 将闪亮的传单世界地图缩放到全宽