2015-03-25 14 views
7

Tôi có một bảng myTable với 3 cột. col_1INTEGER và 2 cột còn lại là DOUBLE. Ví dụ: col_1={1, 2}, col_2={0.1, 0.2, 0.3}. Mỗi phần tử trong col_1 bao gồm tất cả các giá trị của col_2col_2 có giá trị lặp lại cho mỗi phần tử trong col_1. Cột thứ 3 có thể có bất kỳ giá trị như hình dưới đây:Không thể sử dụng nhóm theo và hơn (phân vùng theo) trong cùng một truy vấn?

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 

Những gì tôi muốn là sử dụng một tập hợp chức năng SUM() trên phân vùng Value cột bằng cách col_1 và nhóm lại theo col_2. Bảng Trên nên xem xét như thế này:

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 

tôi đã cố gắng truy vấn SQL sau:

SELECT col_1, col_2, sum(Value) over(partition by col_1) as sum_value 
from myTable 
GROUP BY col_1, col_2 

Nhưng trên v10.5 DB2 nó đã cho các lỗi sau:

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. 

Can bạn vui lòng chỉ ra những gì là sai. Tôi không có nhiều kinh nghiệm với SQL.

Cảm ơn bạn.

+0

MySQL có liên quan gì đến câu hỏi này? (Không gắn thẻ các sản phẩm không liên quan ...) – jarlh

Trả lời

4

Tôi tìm thấy giải pháp.

Tôi không cần sử dụng OVER(PARTITION BY col_1) vì nó đã có trong mệnh đề GROUP BY. Như vậy, truy vấn sau đây mang lại cho tôi câu trả lời đúng:

SELECT col_1, col_2, sum(Value) as sum_value 
from myTable GROUP BY col_1, col_2 

vì tôi đã nhóm w.r.t col_1col_2.

Dave, cảm ơn, tôi đã có ý tưởng từ bài đăng của bạn.

12

Có, bạn có thể, nhưng bạn phải nhất quán về mức độ nhóm. Tức là, nếu truy vấn của bạn là truy vấn GROUP BY, thì trong hàm phân tích , bạn chỉ có thể sử dụng cột "chi tiết" từ phần "không phân tích" của các cột đã chọn của mình. Vì vậy, bạn có thể sử dụng GROUP BY cột hoặc các uẩn phi phân tích, như ví dụ sau:

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 

Hy vọng rằng sẽ giúp

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

Tôi đã xem ví dụ đó. Tôi có thể làm theo cách đó nhưng sau đó tôi nhận tổng số tiền cho mỗi phần tử trong 'col_1' thay vì tổng cho mỗi phần tử riêng biệt trong' col_2' trên mỗi phần tử trong 'col_1' – user3557405

+0

Cập nhật câu trả lời của tôi, xem nó có hoạt động không? – Dave

+0

Tôi đã có cùng một vấn đề này, và Dave, truy vấn của bạn đã cho tôi chính xác những gì tôi cần. –

Các vấn đề liên quan