You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL未按主键分组使用SUM函数:如何将多行求和结果合并为单行

解决方法

你遇到的问题是因为去掉GROUP BY后,HAVING子句里的字段既没被聚合也没在分组定义中,数据库无法解析。要实现所有符合条件的holdings求和并返回单条结果,只需要把HAVING里的行级过滤条件移到WHERE子句中,同时去掉GROUP BY即可:

SELECT SUM(mh.holdings) AS total_holdings
FROM market_data.mstar_holdings mh
INNER JOIN market_data.holder_type ht 
    ON ht.holder_type_code = mh.mstar_security_specific_holder_type
WHERE mstar_investment_id = 'E0USA00AY9' 
    AND ht.adjustment_flag = true 
    AND ht.is_consolidated = false
    AND mh.ownership_percentage > ht.adjustment_threshold;

原理说明

  • 原来的HAVING是用来过滤分组后的结果,但ownership_percentage > ht.adjustment_threshold是行级判断条件(每一行都要满足这个规则),所以应该放到WHERE里先筛选出符合条件的行,再对这些行的holdings求和。
  • 去掉GROUP BY后,整个查询会把所有符合条件的行作为一个整体聚合,最终返回一个单一的总和值。

如果你的数据库对字段引用有严格的模式限制,也可以用子查询先过滤出符合条件的记录,再在外层求和:

SELECT SUM(holdings) AS total_holdings
FROM (
    SELECT mh.holdings
    FROM market_data.mstar_holdings mh
    INNER JOIN market_data.holder_type ht 
        ON ht.holder_type_code = mh.mstar_security_specific_holder_type
    WHERE mstar_investment_id = 'E0USA00AY9' 
        AND ht.adjustment_flag = true 
        AND ht.is_consolidated = false
        AND mh.ownership_percentage > ht.adjustment_threshold
) AS filtered_rows;

内容的提问来源于stack exchange,提问作者Pratik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:05:33