SQLite按随机顺序分组排序

3
我有一张包含曲目和专辑列的歌曲表,我想以随机专辑顺序获取它们。即每个专辑中的歌曲将被排序,但专辑将以随机顺序排列。
例如,如果表格如下:
-----------------
| track | album |
-----------------
| 1     | a     |
| 2     | a     |
| 3     | a     |
| 1     | b     |
| 2     | b     |
| 1     | c     |
| 2     | c     |
-----------------

可能的输出之一是
-----------------
| track | album |
-----------------
| 1     | b     |
| 2     | b     |
| 1     | c     |
| 2     | c     |
| 1     | a     |
| 2     | a     |
| 3     | a     |
-----------------

能否用单个sqlite查询完成此操作?
2个回答

3
首先,您需要随机排序专辑,然后选择曲目。
with tt as (
  select distinct album from t order by random()
)
select t.track, tt.album 
from tt left join t on t.album = tt.album
order by tt.rowid, t.track
;

请参考Sqlfiddle

它不会对每张专辑上的曲目进行排序。 - Dvir Yitzchaki
我按照专辑的行号和曲目进行了简单的排序,祝你好运。我在新的sqlfiddle上进行了验证,这是导致延迟的原因:http://sqlfiddle.com/#!5/0994c/1 - MrSimpleMind

0

为了达到所需的顺序,我不得不在MrSimpleMind的答案中添加排序:

WITH albums AS (SELECT DISTINCT album FROM songs ORDER BY RANDOM()) 
SELECT songs.* FROM albums
LEFT JOIN songs
ON songs.album = albums.album
ORDER BY albums.rowid, songs.track

是的,请看我的回答 :) - MrSimpleMind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接