MYSQLQuery-如何创建一个查询,我们必须列出同一歌手购买特定数量专辑的客户

时间:2017-04-19 15:02:17

标签: mysql sql

我们有以下表格:

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张或更多专辑的客户。我对此非常陌生,我想在这里寻求更多专业人士的意见。

2 个答案:

答案 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以获取名称等等。