SQLでINNER JOIN
とGROUP 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;
前もって感謝します!
最初に、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;
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