gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:37:25 25 4
gpt4 key购买 nike

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

第一个表:

第一个表是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 以及 歌曲标题.

最佳答案

您需要确定前两行的具体顺序。它们在视觉上出现的顺序在正确规范化的数据库中应该是无关紧要的。

对于此示例,假设您要查找“每个播放列表中的两个最低歌曲 ID”。这是 问题,并且该标签上还有许多其他问题。

您可以使用以下查询来做到这一点:

SELECT s.playlistId, s.songId
FROM songRelation s
WHERE(
SELECT COUNT(*)
FROM songRelation s2
WHERE s.playlistId = s2.playlistId AND s.songId >= s2.songId) <= 2;

末尾的 2 表示您想要的每组行数(每个播放列表 2 首歌曲),子查询中的条件提取两个最小的歌曲 ID。如果您想要两个最大的,只需将其更改为 s.songId <= s2.songId .现在,要获取类别信息,您只需加入播放列表表即可:

SELECT p.id, t.songId, p.categoryId
FROM playlist p
JOIN(
SELECT s.playlistId, s.songId
FROM songRelation s
WHERE(
SELECT COUNT(*)
FROM songRelation s2
WHERE s.playlistId = s2.playlistId AND s.songId >= s2.songId) <= 2) t ON t.playlistId = p.id;

请注意,对于这个特定的示例数据,表中没有播放列表 43,因此我的结果不会返回它。

这是一个 SQL Fiddle示例。

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

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