1

目的 1: 販売データは Purchases テーブルに格納されます。あなたの営業スタッフは、売上データをピボット形式で四半期ごとに分類して表示したいと考えています。

Purchases テーブルに売上データがない場合は、作成します。データが 4 四半期にわたることを確認してください。次に、データをピボットするクエリを次のように記述します。

Album              Q1   Q2   Q3   Q4

OK Computer        2    5    3    7

 Sea Change        8    6    2    1 

別のテーブルまたはビューを作成しないでください。どのテーブルも変更しないでください。

クエリを dba1lesson10project1.sql として保存し、プロジェクトを渡します。

これが私がしなければならないことです。しかし、私が作業したいテーブルは次のようになります。そして、それは私がそれをまったく変更できないと課題に述べています。

CustomerID    DateOfPurchase   SongID

1              2007-03-31        3
3              2007-06-30        4
4              2007-09-30        4
5              2007-12-31        5

私が試してみました

  SELECT SongID,
  SUM(CASE WHEN DateOfPurchase = '2007-03-31' THEN DateOfPurchase ElSE 0 END) AS 'Q1',
  SUM(CASE WHEN DateOfPurchase = '2007-06-30' THEN DateOfPurchase ELSE 0 END) AS 'Q2',
  SUM(CASE WHEN DateOfPurchase = '2007-09-30' THEN DateOfPurchase ELSE 0 END) AS 'Q3',
  SUM(CASE WHEN DateOfPurchase = '2007-12-31' THEN DateOfPurchase ELSE 0 END) AS 'Q4'
  FROM Purchases
  GROUP BY SongID;

他のバリアントとともに:

  SELECT SongID,
  SUM(CASE WHEN DateOfPurchase = '2007-03-31' THEN CustomerID ElSE 0 END) AS 'Q1',
  SUM(CASE WHEN DateOfPurchase = '2007-06-30' THEN CustomerID ELSE 0 END) AS 'Q2',
  SUM(CASE WHEN DateOfPurchase = '2007-09-30' THEN CustomerID ELSE 0 END) AS 'Q3',
  SUM(CASE WHEN DateOfPurchase = '2007-12-31' THEN CustomerID ELSE 0 END) AS 'Q4'
  FROM Purchases
  GROUP BY SongID;

と:

  SELECT SongID,
  SUM(CASE WHEN DateOfPurchase = '2007-03-31' THEN SongID ElSE 0 END) AS 'Q1',
  SUM(CASE WHEN DateOfPurchase = '2007-06-30' THEN SongID ELSE 0 END) AS 'Q2',
  SUM(CASE WHEN DateOfPurchase = '2007-09-30' THEN SongID ELSE 0 END) AS 'Q3',
  SUM(CASE WHEN DateOfPurchase = '2007-12-31' THEN SongID ELSE 0 END) AS 'Q4'
  FROM Purchases
  GROUP BY SongID;

どちらが、最後の 2 つで、必要なものがほとんど得られます。ただし、SongID および Quarter ごとに購入できるのは 1 回だけです。代わりに、CustomerID または SongID のいずれかが表示されます。私は自分が何をする必要があるかについて基本的な理解を持っています。しかし、テーブルを変更して実際に購入した回数を表示することができないため、どうすればよいかわかりません。助言がありますか?

4

2 に答える 2

0

現在のクエリは非常に近いものです。いくつかの小さな変更をお勧めします。日付をハードコーディングしていますが、第 1 四半期の日付がそれと等しくない場合2007-03-31は表示されません。

MySQL でこの関数を使用するQUARTER()と、日付の値に基づいて四半期 1 ~ 4 が返されます。

次に、CASE 式では、次のように を 1sumに置き換えます。SongIDSongID

SELECT SongID,
  SUM(CASE WHEN Quarter(DateOfPurchase) = 1 THEN 1 ElSE 0 END) AS Q1,
  SUM(CASE WHEN Quarter(DateOfPurchase) = 2 THEN 1 ELSE 0 END) AS Q2,
  SUM(CASE WHEN Quarter(DateOfPurchase) = 3 THEN 1 ELSE 0 END) AS Q3,
  SUM(CASE WHEN Quarter(DateOfPurchase) = 4 THEN 1 ELSE 0 END) AS Q4
FROM Purchases
GROUP BY SongID;

デモで SQL Fiddle を参照してください

于 2013-09-15T14:04:50.667 に答える