如何随机排序SELECT结果,但在"组" (未分组)

时间:2015-06-25 06:24:08

标签: sqlite random sql-order-by

我有一个SQLITE数据库,其中包含有关音乐文件的信息 - 例如,有专辑,曲目列(以及更多,但为了简单起见,我会将它们排除在外)。

[table SONGS]
ALBUM     TRACK
A1        1
A1        2
A2        1
A2        2
A3        1
A3        2
A4        1
A4        2

我知道我可以SELECT album, track FROM songs ORDER BY random(),但我会把这些专辑弄得像:

ALBUM     TRACK
A4        2
A3        2
A2        1
A1        1
A3        1
A1        2
A2        2
A4        1

我想将订单随机化,但要将相册保存在一起,例如:

ALBUM     TRACK
A3        1
A3        2
A2        1
A2        2
A1        1
A1        2
A4        1
A4        2

我该怎么做?我尝试了很多东西(附加一个SELECT DISTINCT album FROM songs ORDER BY random()的表),但都没有。

我知道我可以在代码中这样做(我在XOJO中写作),但我想用SQLITE来做...

2 个答案:

答案 0 :(得分:1)

我认为您只需要在随机之前通过相册订购:

SELECT album, track FROM songs ORDER BY album, random()

答案 1 :(得分:0)

最简单的方法是使用临时表(如果你想长时间播放这些歌曲,你可能不希望临时表)。 INTEGER PRIMARY KEY列自动填充自动增量值:

CREATE TEMPORARY TABLE AlbumOrder(Album, Sort INTEGER PRIMARY KEY);

INSERT INTO AlbumOrder(Album)
SELECT DISTINCT Album
FROM Songs
ORDER BY random();

SELECT Album, Track
FROM Songs
JOIN AlbumOrder USING (Album)
ORDER BY Sort, Track;