2015-03-25 85 views
7

我有一個表格myTable 3列。 col_1INTEGER,其他2列是DOUBLE。例如,col_1={1, 2}, col_2={0.1, 0.2, 0.3}col_1中的每個元素由col_2col_2的所有值組成,col_1中的每個元素具有重複值。第三列可以有任意值,如下所示:不能在同一個查詢中一次又一次使用group(partition by)?

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 

我想是由col_1Value列分區使用聚合功能SUM()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經驗。

謝謝。

+0

MySQL有什麼問題? (不要標記不涉及的產品...) – jarlh 2015-03-25 08:17:55

回答

4

我找到了解決辦法。

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

戴夫,謝謝,我從你的帖子中得到了這個想法。

12

是的,你可以,但你應該對分組水平保持一致。 也就是說,如果您的查詢是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 
+0

我已經看到了這個例子。我可以這樣做,但然後我得到'col_1'中每個元素的總和,而不是'col_1'中每個元素的'col_2'中每個不同元素的總和。 – user3557405 2015-03-25 08:30:11

+0

更新我的答案,看看是否有用? – Dave 2015-03-25 08:35:24

+0

我有同樣的問題,和戴夫,你的查詢給了我所需要的。 – 2016-05-06 20:19:04

相關問題