2

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

  • 项目名
  • 价格

....哪里ItemName是独一无二的。

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

SELECT ItemName, 
       SUM(Price)
  FROM Items

我收到此错误:

ORA-00937: 不是单组组函数

...只有当我使用 GROUP BY 时才会消失。但是我只能按组求和,而不是全部。

4

9 回答 9

6
SELECT  ItemName, SUM(Price) OVER()
FROM    Items

此查询将为您返回 's 列表ItemName以及每个 's 的价格总和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
于 2009-12-22T16:44:01.783 回答
3

您不能在同一查询中既分组又不分组。您可以使用子查询来获取价格:

select ItemName, (select sum(Price) from Items) as AllPrices
from Items

由于子查询不使用主查询中记录的任何数据,因此数据库应该能够对其进行优化以仅执行一次子查询。

于 2009-12-22T16:40:35.360 回答
2

如果您想要所有这些的总和,为什么要在查询中包含 ItemName ?您有两个选择,包括 ItemName 并使用“GROUP BY ItemName”获取该 ItemName 的所有价格的总和,或者您可以获取所有项目的总和,在这种情况下,您从选择中删除“ItemName”。

于 2009-12-22T16:39:18.627 回答
2

如果 ItemName 是唯一的,那么每个 ItemName 的 Price 是否都与该 ItemName 相关联?

如果您要查找所有商品价格的总和,则必须从 SQL 中省略 ItemName:

SELECT SUM(Price) FROM Items
于 2009-12-22T16:38:17.000 回答
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
于 2009-12-23T03:20:02.770 回答
0

你有没有尝试过

 SELECT SUM(Price) FROM Items
于 2009-12-22T16:38:58.950 回答
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
于 2009-12-22T16:39:10.420 回答
0

它希望你这样做:

select ItemName, sum(price)
from table
group by ItemName;

如果您想要所有项目的总和,那么报告 ItemName 是什么意思?

桌子:

item   price
spoon  2
spoon  4
fork   3
plate  6

对于上表,总和是 15。总和的项目名称是什么?

于 2009-12-22T16:42:21.773 回答
0

由于 ItemName 是唯一的,因此您需要使用以下...

SELECT SUM(Price) FROM Items
于 2009-12-22T16:48:17.597 回答