簡體   English   中英

SQL INNER JOIN 的和不同的值

[英]SQL INNER JOIN of sum distinct values

我有 3 個表,分別稱為musicssingersplaylistInfos 我想獲得前 10 名聽過的英格蘭音樂。什么樣的 sql 查詢對我有幫助?

musics
musicID | singerID
1         1
2         1
3         2

singers
singerID | name |  country
1          Adele   England
2          Mozart  Austria
3          DuaLipa England

playlistInfo
id | singerID | musicID | listened
1    1          1         25
2    3          3         15
3    2           2         20

SELECT * FROM 音樂 m INNER JOIN playlistInfo p ON p.musicID = m.id INNER JOIN 歌手 a ON a.id = m.singerID GROUP BY p.musicID ORDER BY p.listened

我嘗試了這個,但沒有得到我期望的結果。我該如何解決?

那么首先你的樣本數據是錯誤的。 所以首先讓我們創建正確的結構。

請記住,將來如果您共享 sql 腳本來創建您的示例數據,您將獲得更多答案。

-- declare tables
DECLARE @singers TABLE (singerID INT, name NVARCHAR(255), country NVARCHAR(255));
DECLARE @musics TABLE (musicID INT, singerID INT, songName NVARCHAR(255));
DECLARE @playlistInfo TABLE (singerID INT, musicID INT, listened INT);

-- Load sample data
INSERT INTO @singers VALUES (1, 'Adele', 'England'), (2, 'Mozart', 'Austria'), (3, 'DuaLipa', 'England')
INSERT INTO @musics VALUES (1, 1, 'Rolling in the Deep'), (2, 2, 'Symphony No 40'), (3, 3, 'One Kiss')
INSERT INTO @playlistInfo VALUES (1, 1, 25), (2, 2, 15), (3, 3, 20)

然后在我們的表格中查詢來自英格蘭的前 10 名歌手。

SELECT TOP 10
    s.name as Singer, ISNULL(SUM(pl.listened), 0) as TotalListened
FROM 
    @singers s
    LEFT JOIN @musics m ON m.singerID = s.singerID
    LEFT JOIN @playlistInfo pl ON pl.musicID = m.musicID AND pl.singerID = m.singerID
    -- I did left join to show anyone with 0 listen too, you can convert it to `JOIN`
WHERE
    s.country = 'England'
GROUP BY
    s.name
ORDER BY
    SUM(pl.listened) DESC

一些額外的(如果你想獲得最多聽的歌曲)

-- get the most listened song within country
SELECT TOP 10
    s.name as Singer, m.songName, ISNULL(SUM(pl.listened), 0) as TotalListened
FROM 
    @singers s
    LEFT JOIN @musics m ON m.singerID = s.singerID
    LEFT JOIN @playlistInfo pl ON pl.musicID = m.musicID AND pl.singerID = m.singerID
WHERE
    s.country = 'England'
GROUP BY
    s.name,
    m.songName
ORDER BY
    SUM(pl.listened) DESC

暫無
暫無

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

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