0
SELECT DISTINCT(id_no), lastname,
    (SELECT COUNT(purchasedate)  num_of_purch
    FROM sales JOIN Artist ON
        sales.id = Artist.id_no
        WHERE  DATE_SUB(CURDATE(),INTERVAL 1
                          YEAR) <= purchasedate 
              ) AS num_of_purch

FROM Artist 

此查询返回所有艺术家的 ID_no,以及他们的姓氏和购买总数,尽管我想指定哪些购买是给哪个艺术家的。帮助解决这个问题将不胜感激。

编辑 - DISTINCT(id_no) 是多余的,因为它是主键。

4

3 回答 3

2

这显示了每个艺术家 ID 的销售数量:

SELECT artist.id_no, count(sales.id) as num_of_purch
FROM artist left join sales on sales.id = artist.id_no
WHERE DATE_SUB(CURDATE(), INTERVAL 1 YEAR) <= purchasedate
GROUP BY artist.id

要返回姓氏和所有详细信息:

SELECT art_tot.id_no, art_tot.lastname, art_tot.num_of_purch, sales.*
FROM (SELECT artist.id_no, artist.lastname, count(sales.id) as num_of_purch
      FROM artist left join sales on sales.id = artist.id_no
      WHERE DATE_SUB(CURDATE(), INTERVAL 1 YEAR) <= purchasedate
      GOUP BY artist.id, artist.lastname) art_tot
      left join sales on art_tot.id_no = sales.id
于 2012-11-27T21:45:05.740 回答
1

这应该为您提供艺术家和每位艺术家的购买次数

select a.id_no, a.lastname, count(s.purchasedate) num_of_purch
from artists a
join sales s on a.id_no = s.id
where date_sub(curdate(), interval 1 year) <= s.purchasedate
group by a.id_no, a.lastname
于 2012-11-27T21:47:33.550 回答
0

您应该使用 GROUP BY 来获取每个艺术家的计数。

并且您应该使用外部联接来包括去年没有销售的艺术家。

SELECT a.id_no, a.lastname, COUNT(s.purchasedate) AS num_of_purch
FROM Artist a
LEFT OUTER JOIN sales s ON s.id = a.id_no
  AND s.purchasedate => CURDATE() - INTERVAL 1 YEAR
GROUP BY a.id_no;

PS:使用DISTINCT(id_no)是没有意义的,不仅因为 id_no 已经是唯一键,而且因为 DISTINCT 始终适用于选择列表中的所有列,即使您添加括号使其看起来像只适用于一列的函数。

于 2012-11-27T21:54:05.280 回答