如何统计SQL关联查询中A.i字段的重复次数?
解决方案:添加A.i重复次数列
你可以利用SQL的窗口函数来轻松实现这个需求,不需要额外的子查询或复杂的分组操作,直接在原查询的基础上新增一列即可。
修改后的SQL语句
select A.i, A.j, B.x, B.y, B.z, COUNT(A.i) OVER (PARTITION BY A.i) as RepeatColumn from A inner join B on A.id=B.id_B order by A.i,A.j
语句解释
COUNT(A.i) OVER (PARTITION BY A.i)是实现需求的核心:PARTITION BY A.i:按照A.i的值对整个结果集进行分组COUNT(A.i):统计每个分组内的总行数,也就是对应A.i值的重复次数OVER子句的作用是让这个统计结果作为新列,跟随每一行数据返回,而不是将结果聚合为单行
结果验证
执行这条语句后,会完全匹配你的期望输出:
- 所有
A.i='bk'的行,RepeatColumn都会显示3 - 所有
A.i='ro'的行,RepeatColumn都会显示2 A.i='st'的行,RepeatColumn显示1
这个方法高效且简洁,窗口函数在MySQL 8.0+、PostgreSQL、SQL Server等主流数据库中都支持。
内容的提问来源于stack exchange,提问作者Hans_Cusco
相关产品推荐
相关产品推荐

