MySQL查询未展示所有符合条件行 余额占比计算结果异常排查
问题原因
当前查询直接在SELECT子句中混用聚合函数sum(balance)与非聚合字段,既没有配置GROUP BY子句,也没有使用窗口函数划定聚合范围,数据库会将所有符合rate_type = "variable"条件的记录合并为单个分组做聚合计算,因此最终只会返回1行聚合结果,无法输出所有符合条件的贷款明细行。
修正SQL
要保留所有符合条件的明细行,同时计算同利率类型下各贷款余额的占比,需要使用窗口函数实现分区聚合,修正后的语句如下:
SELECT rate_type, loan_id, balance, balance / SUM(balance) OVER (PARTITION BY rate_type) AS balance_ratio FROM submissions WHERE rate_type = "variable"
逻辑说明
SUM(balance) OVER (PARTITION BY rate_type)为窗口函数写法,PARTITION BY rate_type表示按利率类型划分计算窗口,会为每一行匹配所属利率类型的总余额,不会压缩原明细结果的行数- 由于WHERE条件已经限定仅查询
variable类型的贷款,因此计算出的balance_ratio就是单条贷款余额在可变利率贷款总余额中的占比 - 如果需要输出直观的百分比格式,可以将占比计算逻辑替换为
CONCAT(ROUND(balance / SUM(balance) OVER (PARTITION BY rate_type) * 100, 2), '%') AS balance_percentage,代码中的数字2代表保留2位小数,可根据业务需求自行调整。
内容的提问来源于stack exchange,提问作者gandolfini
相关产品推荐
相关产品推荐

