gpt4 book ai didi

mysql - 如何从每组中选择前两行

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:44 25 4
gpt4 key购买 nike

您好,我们有 3 个 music 表,在 MySql 中是这样的:

第一个表:

第一个表是 playlist 表,其中存在 music playlist

playlistId           playlistTitle          categoryId

1 hello 0
2 wow 0
3 wi-fi 0
4 awesome 0
5 sixer 1
6 four 1
7 boundary 2

第二张表:

第二个表是 `songRelation 表,其中每个播放列表都与他们的歌曲相关联

playlistId            songId

1 4
1 3
1 43
1 57
1 98
2 56
2 67
2 90
2 78
3 98
3 78
3 89
43 90

第 3 表:第三个表是 song 表,其中存在歌曲详细信息

songId                songTitle

4 hello
3 real hero
43 singalone
57 awesom
98 really
78 sakaka
98 shikwa
89 moha
90 hello2
67 Sneh

实际上我想得到这样的结果:

playlistId  songId    categoryId songTitle

1 4 0 hello
1 3 0 real hero
2 56 0 singalone
2 67 0 Sneh
3 78 0 sakaka
3 98 0 Shikwa

其中每个 playlistId 将与他们的前 2 个 songId 和他们的 categoryId 以及 songTitle .

最佳答案

您可以使用变量:

SELECT playlistId, songId, categoryId, songTitle
FROM (
SELECT p.playlistId, s.songId, p.categoryId, s.songTitle,
@r := IF (@pid = p.playlistId,
IF (@pid := p.playlistId, @r+1, @r+1),
IF (@pid := p.playlistId, 1, 1)) AS rn
FROM playlist AS p
CROSS JOIN (SELECT @r:=0, @pid:=0) AS vars
INNER JOIN songRelation AS sr ON p.playlistId = sr.playlistId
INNER JOIN song AS s ON sr.songid = s.songid
ORDER BY p.playlistId, s.songId ) AS t
WHERE t.rn <= 2

变量 @r 用于枚举每个 playlistId 切片中的记录。在外部查询中使用它,我们可以轻松地为每个 playlistId 切片获取 2 条记录。

Demo here

关于mysql - 如何从每组中选择前两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32111241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com