我们有以下表格:
Customer:
customer_id (pk)
customer_name
customer_dob
adress
gender
Album:
Album_id (PK)
album_name
singer_id (FK)
Order_Details:
order_id (Pk)
quantity purchased
customer_id (fk)
Order_Basket:
Order_id (fk)
album_id (fk)
我想创建一个SQL查询语句,我想列出同一位歌手购买了4张或更多专辑的客户。我对此非常陌生,我想在这里寻求更多专业人士的意见。
答案 0 :(得分:0)
试试这个:
select customer.customer_id, album.singer_id , count(*)
from customer ,order_details, order_basket, album
where customer.customer_id = order_details.customer_id
and order_details.order_id = order_basket.order_id
and order_basket.album_id = album.Album_id
group by customer.customer_id, album.singer_id
having count(*) > 3
答案 1 :(得分:0)
WITH PurchaseSummary AS (
SELECT d.customer_id, a.singer_id, count(a.album_id) AS album_count
FROM Order_Details d
LEFT JOIN Order_Basket b ON on b.Order_id = d.Order_id
LEFT JOIN Album a ON a.Album_id = b.album_id
GROUP BY d.customer_id, a.singer_id)
SELECT ps.customer_id, ps.singer_id, ps.album_count
FROM PurchaseSummary ps
LEFT JOIN Customer c ON c.customer_id = ps.customer_id
WHERE ps.album_count >= 4
ORDER BY d.customer_id
使用子查询查看所有订单。因为订单可能有多个相册,请在order_basket表上添加。现在您拥有所有相册的订单。点击相册表,您就拥有每个订单的艺术家名称。由于您还拥有客户ID,因此您可以将客户ID和歌手ID与相册的数量进行分组。结果如下:
Customer|Artist|Num Albums
1 A 1
1 B 4
2 A 1
2 B 6
2 C 5
然后,您从该表中选择您的客户ID和艺术家ID,并说明他们必须购买的条件> =该艺术家的4张专辑。最后,加入Customer表以获取有关该客户的更多详细信息。如果您也有Artist表,则可以将其加入Artist ID以获取名称等等。