我正在使用两个表: comporder(数量,cod(Fk on cod(产品),cod_ship); 产品(鳕鱼(Pk),价格); 我需要生成一个查询,该查询将为我提供每个 cod_ship 的 comporder 表中产品价格的总和; 我想出了这个查询:
SELECT sum(p.price),c.cod_ship
FROM product as p JOIN comporder as c
ON(p.cod=c.cod)
GROUP BY c.cod_ship;
但是我不允许使用 GROUP BY 功能,而且我似乎无法获得数量超过 1 的价格。 例如,如果在我的压缩表中,我有:
quantity cod cod_ship
2 "1234567890" 27
3 "1234567890" 28
2 "7894561230" 28
1 "5678324515" 28
4 "1234567890" 27
1 "1234567890" 27
如果在我的产品表中有:
cod price
"1234567890" 20.00
"7894561230" 19.99
"5678324515" 25.99
如果我应用我的查询,结果将是:
sum cod_ship
60 27
65.979 28
当实际结果应该是,根据表中产品的数量:
sum // cod_ship//
140 // 27//
125,97 //28//
所以我似乎无法弄清楚如何根据产品的数量和没有 GROUP BY 函数来获得总和,我应该只将总和显示为“输出”,有人可以帮助我了解如何我可以做吗?
回复评论: 由于分配,我不能使用 group by。 我正在使用 PostgreSQL 12.1
最佳答案
按照 OP 在评论中的要求,这里是一个使用 GROUP BY 的解决方案:
SELECT SUM(price * quantity) as sum, cod_ship FROM comporders
INNER JOIN products ON products.cod = comporders.cod
GROUP BY cod_ship;
编辑:
下面是没有 GROUP BY 的解决方案:
SELECT DISTINCT
(
SELECT SUM(price * quantity)
FROM products
INNER JOIN comporders ON products.cod = comporders.cod
WHERE cod_ship = results.cod_ship
) AS sum,
cod_ship
FROM comporders AS results;
它的工作原理是首先选择一个唯一的 cod_ship
id 列表(我们之前对查询进行分组的依据)。
然后我们使用 cod_ship
id 执行子查询来计算每列的总和。我们使用表别名 results
来引用子查询的父查询中的值。
关于sql - 有没有办法替代 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60623068/