won*_*mer 16 sql postgresql group-by inner-join
我想在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;
Run Code Online (Sandbox Code Playgroud)
先感谢您!
Rap*_*aus 20
首先,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;
Run Code Online (Sandbox Code Playgroud)
但具有相同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;
Run Code Online (Sandbox Code Playgroud)
您想按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;
Run Code Online (Sandbox Code Playgroud)
您也可以在派生表中进行聚合,然后您可以从客户那里获得其他列:
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
Run Code Online (Sandbox Code Playgroud)