[英]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.