我需要列出艺术家的身份证号码、姓氏(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,我也需要所有的id_no。在上,distrinctl name是第一个num_ops的日期。我需要修改这个代码来列出他们今年参与了多少采购。我试过使用purchasedate但是这只返回一行。我希望返回表返回:
第1栏:艺术家的身份证号码
第二栏:算术家的姓
第3栏:购买CD的人数(这是购买日期的计数)
我主要是在和第三纵队斗争,任何帮助都会非常感激。

最佳答案

你需要:
左连接
将日期条件移到联接的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将确保为每个艺术家返回一行,即使没有销售
通过将日期条件移动到join中,该join仍然会为每个艺术家返回一行,即使该年没有销售。如果在WHERE子句中保留该条件,则会筛选出去年没有销售的艺术家。
这里的一个关键点是连接条件可能包含与所涉及的键无关的条件-这就是获取条件连接的方式,这就是您希望在这里使左连接仍然正常工作的原因

关于mysql - 查询以查找今年有多少次购买,每位艺术家,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13593083/

10-09 02:08