显示每条记录的全部总和

时间:2009-12-22 16:35:05

标签: sql oracle ora-00937

假设您有一些包含这两列的项目表:

  • ITEMNAME
  • 价格

....其中ItemName是唯一的。

如何显示每个ItemName的所有价格总和(我使用的是Oracle)?如果我试试这个:

SELECT ItemName, 
       SUM(Price)
  FROM Items

我收到此错误:

  

ORA-00937:不是单组小组   功能

...只有在我使用GROUP BY时才会消失。但是,我只能按群体进行SUM,而不是所有群体。

9 个答案:

答案 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