18

myTable3列のテーブルがあります。col_1INTEGERで、他の 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

私が望むのはSUM()Value列パーティションで集計関数を使用し、によってcol_1グループ化することcol_2です。上の表は次のようになります。

    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の経験があまりありません。

ありがとうございました。

4

2 に答える 2

25

はい、できますが、グループ化レベルに関して一貫性を保つ必要があります。つまり、クエリが 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) as sum_value
    -- also try changing "col_1" to "col_2" in OVER
from myTable
GROUP BY col_2,col_1 
于 2015-03-25T08:24:21.707 に答える
7

解決策を見つけました。

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

私はすでに wrtcol_1col_2.

デイブ、ありがとう、あなたの投稿からアイデアを得ました。

于 2015-03-25T08:52:10.993 に答える