SQL Server随机选曲:按歌手专辑各选1首生成播放列表
解决SQL随机选取每位歌手每张专辑1首曲目的问题
要实现每位歌手的每张专辑仅随机选1首曲目,且每次执行结果不同,可以用窗口函数结合随机排序的方案,这比单纯用ORDER BY NEWID()或DISTINCT更精准。
假设你的表中用于区分歌手和专辑的字段名为Artist和Album(如果实际字段名不同,替换成表中对应名称即可),以下是具体SQL查询:
SELECT MP3_ID, MP3_Path, Artist, Album FROM ( SELECT MP3_ID, MP3_Path, Artist, Album, -- 按歌手+专辑分组,组内随机排序并生成行号 ROW_NUMBER() OVER (PARTITION BY Artist, Album ORDER BY NEWID()) AS RowNum FROM [dbo].[MP3Tracks] ) AS TrackGroups -- 取每组的第一行(随机选中的那首) WHERE RowNum = 1
代码说明:
PARTITION BY Artist, Album:将数据按歌手和专辑拆分成独立分组,确保每个分组对应一位歌手的一张专辑ORDER BY NEWID():SQL Server中NEWID()会生成唯一随机GUID,每组内按这个值排序,每次执行都会得到不同的排序结果ROW_NUMBER() = 1:筛选出每个分组的第一行,也就是该歌手该专辑下随机选中的曲目
如果需要查询更多字段(比如曲目名称、时长等),直接在子查询的SELECT列表中添加即可。
内容的提问来源于stack exchange,提问作者Paul1957
相关产品推荐
相关产品推荐

