簡體   English   中英

使用MySQL聯接表和數據

[英]Joining Tables and Pivoting Data with 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 Albums.Title FROM Albums
 LEFT JOIN Songs
 INNER JOIN Purchases
 ON Songs.SongID = Purchases.SongID
 ON Albums.Title = Purchases.SongID,
 SELECT Title,
 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 Title;

在連接三個單獨的表然后旋轉數據時,我有點不知所措

我已經在其他多個變體中嘗試了上面的代碼,這使我無法通過表連接部分。

任何幫助將非常感激。

我的建議是在嘗試PIVOT數據之前首先是編寫查詢以返回所需的列,這將涉及聯接表。 您沒有提供表定義,所以我在結構上做了一些猜測。 如果表的結構類似於以下內容:

CREATE TABLE Purchases
    (`CustomerID` int, `DateOfPurchase` datetime, `SongID` int)
;

CREATE TABLE Albums
    (`AlbumId` int, `Title` varchar(11))
;

CREATE TABLE Songs
    (`SongID` int, `AlbumID` int)
;

然后,您將使用類似於以下代碼的JOIN從表中進行選擇:

select a.title,
  p.DateOfPurchase
from albums a
inner join songs s
  on a.albumid = s.albumId
inner join purchases p
  on s.songid = p.songid

此查詢將返回給您專輯Title以及需要透視數據的DateOfPurchase 一旦確定了JOINS,就可以用聚合函數和CASE表達式替換p.DateOfPurchase ,並添加GROUP BY子句以獲得最終結果:

select a.title,
  SUM(CASE WHEN Quarter(p.DateOfPurchase) = 1 THEN 1 ElSE 0 END) AS Q1,
  SUM(CASE WHEN Quarter(p.DateOfPurchase) = 2 THEN 1 ELSE 0 END) AS Q2,
  SUM(CASE WHEN Quarter(p.DateOfPurchase) = 3 THEN 1 ELSE 0 END) AS Q3,
  SUM(CASE WHEN Quarter(p.DateOfPurchase) = 4 THEN 1 ELSE 0 END) AS Q4
from albums a
inner join songs s
  on a.albumid = s.albumId
inner join purchases p
  on s.songid = p.songid
group by a.title;

請參閱帶有演示的SQL Fiddle 結果如下:

|       TITLE | Q1 | Q2 | Q3 | Q4 |
| OK Computer |  1 |  0 |  0 |  0 |
|  Sea Change |  0 |  1 |  1 |  0 |

暫無
暫無

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

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