Oracle数据库可互换收发ID对的交易数量分组统计实现方法
可互换对等ID对交易总数统计SQL实现
实现思路
- 核心逻辑是将无序的收发方ID对转换为固定顺序的分组标识:始终把两个ID中较小的作为第一分组字段、较大的作为第二分组字段,这样
(SENDER=A, RECEIVER=B)和(SENDER=B, RECEIVER=A)会被归为同一分组 - 按固定顺序的两个ID字段分组后,直接统计分组内的交易记录数即可得到对应ID对的总交易量,最终输出的收发方顺序可按需调整
高兼容SQL写法(支持所有主流SQL数据库)
SELECT CASE WHEN SENDER < RECEIVER THEN SENDER ELSE RECEIVER END AS SENDER, CASE WHEN SENDER > RECEIVER THEN SENDER ELSE RECEIVER END AS RECEIVER, COUNT(*) AS "TRANSACTION COUNT" FROM 交易表名 GROUP BY CASE WHEN SENDER < RECEIVER THEN SENDER ELSE RECEIVER END, CASE WHEN SENDER > RECEIVER THEN SENDER ELSE RECEIVER END;
如果需要输出的收发方顺序为较大值在前、较小值在后,只需交换SELECT语句中两个字段的取值逻辑即可。
简化写法(兼容Oracle、MySQL、PostgreSQL等支持LEAST/GREATEST函数的数据库)
SELECT LEAST(SENDER, RECEIVER) AS SENDER, GREATEST(SENDER, RECEIVER) AS RECEIVER, COUNT(*) AS "TRANSACTION COUNT" FROM 交易表名 GROUP BY LEAST(SENDER, RECEIVER), GREATEST(SENDER, RECEIVER);
效果说明
针对提供的示例数据执行上述语句后,会得到完全符合要求的输出:
| SENDER | RECEIVER | TRANSACTION COUNT |
|---|---|---|
| 1234 | 5678 | 4 |
| 5678 | 9876 | 2 |
内容的提问来源于stack exchange,提问作者Larx
相关产品推荐
相关产品推荐

