假设您有一些包含这两列的项目表:
....其中ItemName
是唯一的。
如何显示每个ItemName
的所有价格总和(我使用的是Oracle)?如果我试试这个:
SELECT ItemName,
SUM(Price)
FROM Items
我收到此错误:
ORA-00937:不是单组小组 功能
...只有在我使用GROUP BY时才会消失。但是,我只能按群体进行SUM,而不是所有群体。
答案 0 :(得分:6)
SELECT ItemName, SUM(Price) OVER()
FROM Items
此查询会返回ItemName
的列表以及每个ItemName
的总价格总和:
SELECT ItemName, SUM(Price) OVER()
FROM (
SELECT 'Apple' AS ItemName, 100 AS price
FROM dual
UNION ALL
SELECT 'Banana', 200 AS price
FROM dual
UNION ALL
SELECT 'Cocoa', 300 AS price
FROM dual
) q
ItemName Price
-------- -----
Apple 600
Banana 600
Cocoa 600
答案 1 :(得分:3)
您不能同时进行分组,也不能在同一查询中进行分组。您可以使用子查询来获取价格:
select ItemName, (select sum(Price) from Items) as AllPrices
from Items
由于子查询不使用主查询中记录中的任何数据,因此数据库应该能够优化它以仅执行一次子查询。
答案 2 :(得分:2)
如果ItemName是唯一的,那么每个ItemName的价格不会与该ItemName相关联吗?
如果您要查找所有项目价格的总和,则必须从SQL中省略ItemName:
SELECT SUM(Price) FROM Items
答案 3 :(得分:2)
如果您想要所有这些的总和,为什么在查询中包含ItemName?您有两个选择,包括ItemName并使用“GROUP BY ItemName”获取该ItemName的所有价格的总和,或者您可以获得所有项目的总和,在这种情况下,您从select中删除“ItemName”。 / p>
答案 4 :(得分:0)
你试过吗
SELECT SUM(Price) FROM Items
答案 5 :(得分:0)
如果ItemName是唯一的,则聚合结果将包含与表相同的行数。 SUM函数将按存在重复项的列进行分组,以便为具有该值的所有列提供SUM:
SELECT ItemName, SUM(Price)
FROM [Table]
GROUP BY ItemName
表值:
ItemName Price
======== =====
Foo $1.00
Bar $5.00
Bar $5.00
汇总结果:
ItemName Price
======== =====
Foo $1.00
Bar $10.00
答案 6 :(得分:0)
它希望你这样做:
select ItemName, sum(price)
from table
group by ItemName;
如果您想要所有项目的总和,那么报告ItemName的含义是什么?
表:
item price
spoon 2
spoon 4
fork 3
plate 6
对于上表,总和为15.总和的项目名称是什么?
答案 7 :(得分:0)
由于ItemName是唯一的,因此您需要使用以下内容...
SELECT SUM(Price) FROM Items
答案 8 :(得分:0)
也许您所追求的是物品清单,价格以及价格总和?
SELECT ItemName, SUM(Price) Price
FROM Items
GROUP BY ROLLUP(ItemName);
ITEMNAME PRICE
======== =====
Apples 1.00
Bananas 2.00
Cherries 3.00
6.00