如何在SQL中分别按title和link聚合price并返回关联结果?
解决方法
假设你的业务表名为goods,核心字段包含title、link、price,这里提供两种可直接复用的SQL实现方案:
方案1:子查询关联法
先分别计算每个title的总价格、每个link的总价格,再通过关联将聚合结果映射到每条唯一的title-link记录上:
SELECT DISTINCT g.title, g.link, tp.title_price, lp.link_price FROM goods g INNER JOIN ( -- 按title维度计算总价格 SELECT title, SUM(price) AS title_price FROM goods GROUP BY title ) tp ON g.title = tp.title INNER JOIN ( -- 按link维度计算总价格 SELECT link, SUM(price) AS link_price FROM goods GROUP BY link ) lp ON g.link = lp.link;
方案2:窗口函数法(更简洁高效)
利用窗口函数直接在原表上计算分组聚合值,无需额外关联子查询,同时用DISTINCT确保返回的title-link组合唯一:
SELECT DISTINCT title, link, SUM(price) OVER (PARTITION BY title) AS title_price, SUM(price) OVER (PARTITION BY link) AS link_price FROM goods;
关于你之前遇到的问题说明
直接用GROUP BY title, link只能得到当前title-link组合的价格总和,无法获取整个title或link维度的全局聚合值。子查询报错通常是因为关联条件不匹配、子查询别名冲突,或者未处理重复记录导致的逻辑错误。
内容的提问来源于stack exchange,提问作者habib
相关产品推荐
相关产品推荐

