我知道有很多關于 sql union/join 的話題,但這是一個特例,因為我想比較兩個不同商店中每個客戶的費用。我正在使用“Sakila”示例資料庫
SELECT customer.last_name AS prenom,
sum(payment.amount) AS total_payé
FROM payment
INNER JOIN customer ON payment.customer_id = customer.customer_id
WHERE store_id = 1
LIMIT 3
UNION ALL
SELECT customer.last_name AS prenom,
sum(payment.amount) AS total_payé
FROM payment
INNER JOIN customer ON payment.customer_id = customer.customer_id
WHERE store_id = 2
LIMIT 3
但是有一個錯誤,我需要幫助:(
uj5u.com熱心網友回復:
我不認為這真的是你想要的。限制總是只給出回傳的前 3 個(在這種情況下)。不能保證在商店 1 購物的人會從商店 2 購買。
您可能最好使用 sum( case ) 條件,例如
SELECT
c.last_name prenom,
c.customer_id,
sum( case when p.store_id = 1 then p.amount else 0 end ) Store1Paid,
sum( case when p.store_id = 2 then p.amount else 0 end ) Store2Paid
FROM
payment p
JOIN customer c
ON p.customer_id = c.customer_id
WHERE
p.store_id in( 1, 2 )
GROUP BY
c.customer_id,
c.last_name
LIMIT
3
現在,如果您更關心誰是每個商店中收入最高的客戶,那么,是的,工會會更實用,但一定要包括他們來自哪家商店,這樣您就可以在結果集中知道,而不僅僅是 3來自每個人
SELECT
c.last_name prenom,
c.customer_id,
p.store_id,
sum( p.amount ) StorePayments
FROM
payment p
JOIN customer c
ON p.customer_id = c.customer_id
WHERE
p.store_id = 1
GROUP BY
c.customer_id,
c.last_name,
p.store_id
order by
sum( p.amount ) desc
LIMIT
3
union ALL
SELECT
c.last_name prenom,
c.customer_id,
p.store_id,
sum( p.amount ) StorePayments
FROM
payment p
JOIN customer c
ON p.customer_id = c.customer_id
WHERE
p.store_id = 2
GROUP BY
c.customer_id,
c.last_name,
p.store_id
order by
sum( p.amount ) desc
LIMIT
3
我在所有 group by 子句中包含客戶 ID 的原因是,如果您有 10 個同名“John”怎么辦。您不會通過他們的 ID 來區分各個客戶。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/438130.html
上一篇:從兩個表中獲取每日報告
下一篇:SQL:旋轉后組合行
