3列のテーブルmyTable
があります。 _col_1
_はINTEGER
であり、他の2つの列はDOUBLE
です。たとえば、_col_1={1, 2}, col_2={0.1, 0.2, 0.3}
_。 _col_1
_の各要素は_col_2
_のすべての値で構成され、_col_2
_には_col_1
_の各要素の値が繰り返されます。 3番目の列には、次のように任意の値を指定できます。
_ col_1 | col_2 | Value
----------------------
1 | 0.1 | 1.0
1 | 0.2 | 2.0
1 | 0.2 | 3.0
1 | 0.3 | 4.0
1 | 0.3 | 5.0
2 | 0.1 | 6.0
2 | 0.1 | 7.0
2 | 0.1 | 8.0
2 | 0.2 | 9.0
2 | 0.3 | 10.0
_
私が欲しいのは、Value
列パーティションで_col_1
_で、_col_2
_でグループ化された集約関数SUM()
を使用することです。上記の表は次のようになります。
_ col_1 | col_2 | sum_value
----------------------
1 | 0.1 | 1.0
1 | 0.2 | 5.0
1 | 0.3 | 9.0
2 | 0.1 | 21.0
2 | 0.2 | 9.0
2 | 0.3 | 10.0
_
次のSQLクエリを試しました。
_SELECT col_1, col_2, sum(Value) over(partition by col_1) as sum_value
from myTable
GROUP BY col_1, col_2
_
しかし、DB2 v10.5では、次のエラーが発生しました。
_SQL0119N An expression starting with "Value" specified in a SELECT
clause, HAVING clause, or ORDER BY clause is not specified in the
GROUP BY clause or it is in a SELECT clause, HAVING clause, or ORDER
BY clause with a column function and no GROUP BY clause is specified.
_
何がおかしいのか教えてください。 SQLの経験はあまりありません。
ありがとうございました。
私は解決策を見つけました。
OVER(PARTITION BY col_1)
を使用する必要はありません。既にGROUP BY
句。したがって、次のクエリでは正しい答えが得られます。
SELECT col_1, col_2, sum(Value) as sum_value
from myTable GROUP BY col_1, col_2
私はすでにw.r.t col_1
およびcol_2
。
デイブ、ありがとう、あなたの投稿からアイデアを得た。
はい、できますが、グループ化レベルに関して一貫性を保つ必要があります。つまり、クエリがGROUP BYクエリの場合、分析関数では、選択した列の「非分析」部分の「詳細」列のみを使用できます。したがって、次の例のように、GROUP BY列または非分析集計のいずれかを使用できます。
select product_id, company,
sum(members) as No_of_Members,
sum(sum(members)) over(partition by company) as TotalMembership
From Product_Membership
Group by Product_ID, Company
役立つことを願っています
SELECT col_1, col_2, sum(Value) over(partition by col_1(also try changing this to "col_2"))) as sum_value
from myTable
GROUP BY col_2,col_1