2014-07-04 20 views
7

Tôi muốn có một truy vấn trong SQL thực hiện INNER JOINGROUP BY cùng một lúc. Tôi đã thử những điều sau không hoạt động:nhóm postgresql bởi và tham gia bên trong

SELECT customer.first_name, SUM(payment.amount) 
FROM customer 
GROUP BY customer.customer_id 
INNER JOIN payment 
ON payment.customer_id = customer.customer_id; 

Cảm ơn bạn trước!

Trả lời

8

Đầu tiên, GROUP BY xuất hiện ở cuối truy vấn (ngay trước các điều khoản order by hoặc having nếu bạn có).

Sau đó, tất cả các trường trong lựa chọn không nằm trong hàm tổng hợp phải nằm trong mệnh đề nhóm theo mệnh đề.

nên

SELECT customer.first_name, SUM(payment.amount) 
FROM customer 
INNER JOIN payment 
ON payment.customer_id = customer.customer_id 
GROUP BY customer.first_name; 

Nhưng khách hàng với cùng một first_name sẽ được nhóm lại, mà có lẽ không thực sự những gì bạn muốn.

để thay

SELECT customer.first_name, SUM(payment.amount) 
FROM customer 
INNER JOIN payment 
ON payment.customer_id = customer.customer_id 
GROUP BY customer.first_name, customer.customer_id; 
+1

Cảm ơn bạn, đó là những gì tôi tìm kiếm! [Postgres tutorial] (http://www.postgresqltutorial.com/postgresql-group-by/) làm tôi bối rối, bởi vì họ nói bạn phải đặt mệnh đề 'GROUP BY' ngay sau' FROM' hoặc 'WHERE'clause . – wonderbummer

7

Bạn muốn nhóm của customer_id, nhưng có được first_name?

SELECT customer.first_name, SUM(payment.amount) 
FROM customer 
INNER JOIN payment 
ON payment.customer_id = customer.customer_id 
GROUP BY customer.customer_id, customer.first_name; 

Bạn cũng có thể thực hiện kết hợp trong một bảng nguồn gốc, sau đó bạn có thể nhận được các cột bổ sung từ khách hàng:

SELECT customer.first_name, SumPayment 
FROM customer 
INNER JOIN 
(
    SELECT customer_id, 
      SUM(payment.amount) AS SumPayment 
    GROUP BY customer_id 
    FROM payment 
) AS payment 
ON payment.customer_id = customer.customer_id 
Các vấn đề liên quan