如何在Oracle SQL中统计Dept+Employee+TransactionDate的重复次数
单条SQL实现需求的方案
完全可以通过单条SQL查询实现这个需求,下面提供两种常用思路:
方法一:使用窗口函数(推荐)
这是最简洁高效的写法,利用窗口函数直接在原记录上附加分组统计数:
SELECT Dept, Employee, TransactionDate, Event, COUNT(*) OVER (PARTITION BY Dept, Employee, TransactionDate) AS count FROM transaction;
逻辑说明:
PARTITION BY Dept, Employee, TransactionDate会将数据按这三个字段的组合分组COUNT(*) OVER (...)计算每个分组内的总记录数,并将该数值赋值给分组内的每一条记录,完全匹配你需要的结果格式。
方法二:子查询关联(兼容老版本SQL)
如果你的数据库不支持窗口函数,可以用子查询先统计分组总数,再关联原表:
SELECT t.Dept, t.Employee, t.TransactionDate, t.Event, g.group_count AS count FROM transaction t INNER JOIN ( SELECT Dept, Employee, TransactionDate, COUNT(*) AS group_count FROM transaction GROUP BY Dept, Employee, TransactionDate ) g ON t.Dept = g.Dept AND t.Employee = g.Employee AND t.TransactionDate = g.TransactionDate;
逻辑说明:
- 子查询先按
Dept+Employee+TransactionDate分组,统计每个组合的总条数 - 通过
INNER JOIN将原表的每条记录与对应分组的统计数关联,得到最终结果。
内容的提问来源于stack exchange,提问作者tintin
相关产品推荐
相关产品推荐

