如何对派生表的ID计数求和并将总数值关联到每个ID对应行?
实现方案
你需要的是在保留所有原始ID行的前提下,将IsDidSmthBad字段替换为符合查询条件的总行数,有两种常用实现方式:
方案1:窗口函数实现(优先选用,性能更好)
主流数据库(MySQL8.0+、PostgreSQL、SQL Server、Oracle等)均支持窗口函数,无需关联操作,适配派生表场景,伪查询如下:
SELECT ID, COUNT(*) OVER () AS IsDidSmthBad FROM -- 这里替换为你自己的派生表逻辑 (SELECT * FROM 规范化表 WHERE 你的原过滤条件) AS Table1
核心逻辑
COUNT(*) OVER ()是无分区、无排序的窗口函数,会直接统计当前查询结果集的总行数,每一行都会返回这个全局统计值,完全匹配你需要的输出效果。
方案2:子查询关联实现(兼容旧版本数据库)
如果所用数据库不支持窗口函数,可以用聚合子查询+交叉关联的方式实现:
SELECT t1.ID, t2.total_count AS IsDidSmthBad FROM -- 外层派生表,和子查询用相同的过滤规则 (SELECT * FROM 规范化表 WHERE 你的原过滤条件) AS t1 CROSS JOIN -- 统计符合条件的总行数的子查询 (SELECT COUNT(*) AS total_count FROM 规范化表 WHERE 你的原过滤条件) AS t2
注意事项
两个位置的过滤条件必须完全一致,才能保证统计的行数和返回的行范围匹配,避免出现统计值错误。
内容的提问来源于stack exchange,提问作者Dias
相关产品推荐
相关产品推荐

