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)、これは1行しか返しません。返すテーブルが返されることを望みます:

1 列目: アーティストの ID 番号
2 列目: アーティストの姓
3 列目: CD を購入した人数 (購入数)

私は主に 3 列目に苦労しています。

4

1 に答える 1

2

必要なもの:

  • 結合_
  • 日付条件をONJOINの句に移動します
  • 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と、昨年売上を上げなかったアーティストは除外されます。

ここで重要な点は、結合条件に関連するキーとは関係のない条件が含まれている可能性があることです。これにより、条件付き結合を取得できます。これにより、左側の結合を正しく機能させることができます。

于 2012-11-28T00:54:03.360 に答える