admin

不能在同一查询中使用group by和over(partition by)吗?

sql

我有一个myTable3列的表格。col_1INTEGER,其他2列是DOUBLE。例如,col_1={1, 2},col_2={0.1, 0.2,0.3}。中的每个元素col_1均由中的所有值组成,col_2col_2具有中的每个元素重复的值col_1。第三列可以具有任何值,如下所示:

    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()Valuecol_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没有太多的经验。

谢谢你。


阅读 374

收藏
2021-05-10

共1个答案

admin

我找到了解决方案。

我不需要使用,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

戴夫,谢谢,我从您的帖子中得到了这个主意。

2021-05-10