我有一个myTable3列的表格。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。第三列可以具有任何值,如下所示:
myTable
col_1
INTEGER
DOUBLE
col_1={1, 2},col_2={0.1, 0.2,0.3}
col_2
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。上表应如下所示:
SUM()
Value
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子句中。因此,以下查询为我提供了正确的答案:
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_1和col_2。
戴夫,谢谢,我从您的帖子中得到了这个主意。