web-dev-qa-db-ja.com

postgresqlのグループ化と内部結合

SQLでINNER JOINGROUP BYを同時に実行するクエリが必要です。私はうまくいかない以下を試しました:

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

前もって感謝します!

16
wonderbummer

最初に、GROUP BYはクエリの最後にあります(いくつかある場合はorder byまたはhaving句の直前)。

次に、集約関数にないselectのすべてのフィールドがgroup by句に含まれている必要があります。

そう

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

しかし、同じfirst_nameを持つ顧客はグループ化されます。

むしろ

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;
20

Customer_idでグループ化したいが、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;

派生テーブルで集計を行うこともできます。そうすると、顧客から追加の列を取得できます。

SELECT customer.first_name, SumPayment
FROM customer
INNER JOIN 
 (
   SELECT customer_id,
          SUM(payment.amount) AS SumPayment
   FROM payment
   GROUP BY customer_id
 ) AS payment
ON payment.customer_id = customer.customer_id
10
dnoeth