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

これは、各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
于 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 が既に一意のキーであるだけでなく、括弧を追加して 1 つの列にのみ適用される関数のように見せても、DISTINCT は常に選択リスト内のすべての列に適用されるため、使用は無意味です。

于 2012-11-27T21:54:05.280 に答える