2

次の2つの列を持ついくつかのアイテムのテーブルがあるとします。

  • 項目名
  • 価格

....どこItemNameがユニークか。

すべてのすべての価格の合計をどのように表示しますかItemName(私はOracleを使用しています)?私がこれを試してみると:

SELECT ItemName, 
       SUM(Price)
  FROM Items

このエラーが発生します:

ORA-00937:単一グループのグループ機能ではありません

...これは、GROUPBYを使用した場合にのみ消えます。しかし、その場合、すべてではなく、グループごとにのみSUMを実行できます。

4

9 に答える 9

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
于 2009-12-22T16:44:01.783 に答える
3

同じクエリでグループ化することもグループ化しないこともできません。サブクエリを使用して価格を取得できます。

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

サブクエリはメインクエリのレコードのデータを使用しないため、データベースはサブクエリを1回だけ実行するように最適化できる必要があります。

于 2009-12-22T16:40:35.360 に答える
2

ItemNameが一意である場合、各ItemNameの価格は、そのItemNameに関連付けられているものではありませんか?

すべてのアイテム価格の合計を探している場合は、SQLからItemNameを除外する必要があります。

SELECT SUM(Price) FROM Items
于 2009-12-22T16:38:17.000 に答える
2

それらすべての合計が必要な場合、なぜクエリにItemNameを含めるのですか?ItemNameを含め、「GROUP BY ItemName」を使用してそのItemNameのすべての価格の合計を取得するか、すべてのアイテムの合計を取得するか、選択から「ItemName」を削除するという2つの選択肢があります。

于 2009-12-22T16:39:18.627 に答える
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 に答える