[如果已經在其他地方回答了這個問題,我會很感激地獲取鏈接并洗掉它]
我有一個播放串列表:
pid | name
1 | playlist 1
2 | playlist 2
3 | playlist 3
和一張歌曲表:
sid | name
1 | song 1
2 | song 2
3 | song 3
它們與此連接表有關:
pid | sid
1 | 1
1 | 2
1 | 3
2 | 2
3 | 1
我已經設法讓加入作業
SELECT playlists.pid, songs.*
FROM playlists
INNER JOIN playlist_contains_song
ON playlists.pid = playlist_contains_song.pid
INNER JOIN songs
ON playlist_contains_song.sid = songs.sid;
這給了我這個結果:
pid | sid | name
1 | 1 | song 1
1 | 2 | song 2
1 | 3 | song 3
2 | 2 | song 2
3 | 1 | song 1
現在我想知道是否有辦法“水平”獲取這些資料。首選輸出應如下所示:
pid | 1 | 2 | 3
1 | 1 | 1 | 1
2 | 0 | 1 | 0
3 | 1 | 0 | 0
其中列是 sid 并且值代表 true 或 false,無論歌曲是否是播放串列的一部分。
提前致謝!
uj5u.com熱心網友回復:
使用資料透視查詢:
SELECT pid,
COUNT(*) FILTER (WHERE sid = 1) AS "1",
COUNT(*) FILTER (WHERE sid = 2) AS "2",
COUNT(*) FILTER (WHERE sid = 3) AS "3"
FROM playlist_contains_song
GROUP BY pid
ORDER BY pid;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/389445.html
標籤:sql PostgreSQL的 加入 选择 连接表
下一篇:如何檢索每個用戶的最新訂閱?
