簡體   English   中英

MYSQL-子查詢問題

[英]MYSQL - Issue with sub-query

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)是多余的,因為它是主鍵。

這顯示了每個artist_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

這應該為您提供藝術家以及每個藝術家的購買次數

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

您應該使用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始終適用於選擇列表中的所有列,即使您添加括號使其看起來像僅適用於一列的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM