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

PostgreSQL计算用户库存价值时对DISTINCT ON计算列SUM求和报错如何解决

解决方案

你原来的DISTINCT ON查询已经能正确返回每个卡片最新价格对应的单卡价值,只需要将这个查询作为子查询嵌套,外层对x列求和即可,正确代码如下:

SELECT SUM(x) AS total_inventory_value
FROM (
    SELECT DISTINCT ON (pricing_cards.card_id)
        (inventory_cards.nonfoil * pricing_cards.nonfoil) + (inventory_cards.foil * pricing_cards.foil) as x
    FROM inventory_cards 
        INNER JOIN pricing_cards ON pricing_cards.card_id = inventory_cards.card_id
    WHERE inventory_cards.user_id = 1
    ORDER BY pricing_cards.card_id, pricing_cards.date DESC
) AS card_values;

错误原因说明

  • 直接在DISTINCT ON的同层加SUM会触发GROUP BY语法校验,因为同层的聚合函数要求所有非聚合列都出现在GROUP BY中,和你取「每个卡片最新价格对应价值」的逻辑冲突
  • 你添加GROUP BY pricing_cards.card_id, pricing_cards.date后,聚合是按「卡片ID+价格日期」分组求和,依然是返回每个分组的单卡价值,不会做全局汇总

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:54:02