我需要列出艺术家的 ID_no、姓氏 (lname) 以及如何购买他们今年发行的作品。有关购买的唯一信息是不同的购买日期。
到目前为止我的代码:
SELECT id_no, lname, purchasedate AS num_ops
FROM Artist JOIN Sales ON Artist.id_no = Sales.artist
WHERE DATE_SUB(CURDATE(),INTERVAL 1 YEAR) <= purchasedate
但是,这只会返回已进行销售的 Id_no,即使它是 0,我也需要所有。在 distrinctl name
上,num_ops
是他们第一次销售的日期购买日期
。我需要更改此代码以列出他们在今年内参与的购买次数。我尝试过使用 COUNT(purchasedate)
但这只返回一行。我希望返回表返回:
第一列:艺术家的 ID 号
第二栏:艺术家的姓氏
第三列:购买 CD 的人数(即购买次数)
我主要在第三列上苦苦挣扎,任何帮助将不胜感激。
最佳答案
您需要:
- 左连接
- 将日期条件移至 JOIN 的
ON
子句 - 使用
count(*)
聚合函数
像这样:
SELECT id_no, lname, count(purchasedate) as num_ops
FROM Artist
LEFT JOIN Sales ON Artist.id_no = Sales.artist
AND DATE_SUB(CURDATE(),INTERVAL 1 YEAR) <= purchasedate
GROUP BY id_no, lname
LEFT JOIN
将确保即使没有销售,也会为每位艺术家返回一行- 通过将日期条件移至联接中,即使当年没有销售,仍将为每位艺术家返回一行。如果将条件保留在
WHERE
子句中,则会过滤掉去年未实现销售的艺术家。
这里的一个关键点是,连接条件可能包含与所涉及的键无关的条件 - 这就是您获得条件连接的方式,这就是您想要使左连接仍然正常运行的
关于mysql - 查询每位艺术家今年的购买量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593083/