2012-11-27 26 views
2

我需要列出藝術家的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是他們的第一purchasedate的日期。我需要修改此代碼以列出他們今年內參與的購買次數。我試過使用COUNT(purchasedate),但這隻返回一行。我想返回表返回:

第一縱隊:藝術家的ID號
第2列:Aritist的姓氏
第3列:誰購買的人的數量及其CD的(這是而purchaseDate的計數)

我在第三欄主要努力掙扎,任何幫助將大大appriciated。

回答

2

您需要:

  • 一個離開加入
  • 移動日期條件進入的的ON條款JOIN
  • 使用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條款中,則會過濾掉去年沒有銷售的藝術家。

一個關鍵這裏的一點是,加入條件,可包含無關涉及到的關鍵條件 - 這就是你如何讓條件連接,這是你想要的這裏,使左連接是否還會正常運行

+0

這給了num_ops一個,即使沒有銷售,但顯示所有的藝術家的 – user1854392

+0

我知道了,只需要更改計數(*)也算數(購買) – user1854392

+0

行 - 我更新了查詢與您的反饋。謝謝 – Bohemian

相關問題