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
相关产品推荐
相关产品推荐

