mysql - 查询每位艺术家今年的购买量

标签 mysql database

我需要列出艺术家的 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/

相关文章:

mysql - ActiveRecord 的行为不符合我的预期

mysql - NodeJS - MySQL 和 Unicode 字符串乱码

mysql - 如何在MySql中将+1添加到代码 ' 001'和代码 ' 009 '?

c# - 为多行 SQL 创建唯一 ID

database - 创建有或没有模式的用户?

mysql - mysql 中的触发器查询错误

javascript - 序列化返回日期的时间错误

mysql - 如何从两个表中获取数据

database - Oracle SQL 开发人员中的 DB2 数据库

sql - 在多个位置模拟和操作分区数据库