簡體   English   中英

使用MySql透視數據

[英]Pivoting Data Using MySql

目標1:您的銷售數據存儲在“購買”表中。 您的銷售人員希望以透視形式查看銷售數據,按季度細分。

如果您的購買表沒有銷售數據,請創建一些。 確保數據跨越四個季度。 接下來,編寫查詢以按如下所示樞轉數據:

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僅購買一次。 他們向我顯示CustomerID或SongID。 我對需要做的事情有基本的了解。 但是,由於無法更改表格以顯示實際上已經進行了多少次購買,因此我不確定該怎么做。 有什么建議么?

您當前的查詢非常接近,我建議您進行一些小的更改。 您正在對日期進行硬編碼,但是如果您在第一季度中有一個不等於2007-03-31 ,它將不會顯示,該怎么辦。

我將在MySQL中使用QUARTER()函數,這將基於日期值返回四分之一至四分之一。

第二,我不認為你需要sumSongID ,你的情況我表達將取代SongID 1類似以下內容:

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

您可以使用MySQL Pivot表生成器輕松地執行此季度報告。 創建報告時,系統會要求您添加“列設置” 列設置 請選擇“采購表”作為“ ”,將包含日期值的列作為“ 字段 ”。 選擇日期值后,應該會出現一個功能菜單,請選擇“ Quarter ”,以按照您的要求將數據透視表划分為四分之一。 請注意,如果願意,您可以選擇創建特定年份的報告,在這種情況下,應選中“ 精確年份 ”框並添加特定年份,否則不要選中“ 精確年份 ”框。

最終報告將能夠看到類似此報告的內容:

http://mysqlpivottable.net/MySQL-Pivot-Table-Demo/tables/Quarterly_Sales_Report/

暫無
暫無

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

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