基于SUM_WEIGHT条件筛选SQL查询结果行的实现求助
按SUM_WEIGHT条件筛选行的SQL实现
完整解决方案SQL
WITH temp_data AS ( SELECT ID, WEIGHT, ACC, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID, WEIGHT asc, ACC asc) as ROWNUMBER, SUM(WEIGHT) OVER (PARTITION BY ID) as SUM_WEIGHT FROM TABLE1 ) SELECT * FROM temp_data WHERE (SUM_WEIGHT > 1 AND ROWNUMBER = 1) OR SUM_WEIGHT <= 1;
逻辑说明
你已经通过窗口函数算出了每个ID的行序号ROWNUMBER和总权重SUM_WEIGHT,只需在这个基础结果上添加过滤逻辑:
- 当
SUM_WEIGHT > 1时,仅保留对应ID下ROWNUMBER = 1的行(即你指定排序规则后的第一行) - 当
SUM_WEIGHT <= 1时,保留该ID的所有行
结果匹配验证
执行上述SQL后会得到你期望的结果:
- ID=4的总权重为2>1,只保留行序号为1的记录
- ID=5的总权重为0.3<=1,两条记录全部保留
- 其余ID的总权重均<=1,对应记录全部保留
内容的提问来源于stack exchange,提问作者josesilva
相关产品推荐
相关产品推荐

