SQL Workbench中对按年周分组表计算各核验类型周度占比的方法
实现方案
你可以通过两种常见方式实现该需求,无需担心汇总表和原表行数不一致的问题:
方案1:使用窗口函数(推荐,无需额外关联表)
窗口函数可以直接在原表的每一行计算对应年、周的总核验量,不会改变原表行数,直接完成占比计算。
假设你的原表名为 verification_records,查询语句如下:
SELECT Year, Week, Verif_Type, Total, -- 乘以100.0是为了避免整数除法导致精度丢失,ROUND保留整数位和你的预期输出一致 ROUND(Total * 100.0 / SUM(Total) OVER (PARTITION BY Year, Week), 0) AS Percent FROM verification_records ORDER BY Year, Week, Verif_Type;
方案2:关联周汇总表
如果你的数据库不支持窗口函数,可以用你已经计算好的周汇总表做一对多关联,汇总表的一行对应原表同一周的多行,完全可以正常关联:
SELECT t1.Year, t1.Week, t1.Verif_Type, t1.Total, ROUND(t1.Total * 100.0 / t2.week_total, 0) AS Percent FROM verification_records t1 -- 关联你已经算好的周汇总表,下面子查询可以替换成你自己生成的汇总表名 LEFT JOIN ( SELECT Year, Week, SUM(Total) AS week_total FROM verification_records GROUP BY Year, Week ) t2 ON t1.Year = t2.Year AND t1.Week = t2.Week ORDER BY t1.Year, t1.Week, t1.Verif_Type;
两种方案输出的结果都和你给出的预期格式完全一致。
内容的提问来源于stack exchange,提问作者Ahribba
相关产品推荐
相关产品推荐

