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

How to sort SELECT results randomly, but in "groups" (NOT grouped 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

我该怎么做?我尝试了很多东西(还有 table 和 SELECT DISTINCT album FROM songs ORDER BY random()),但其中 none 有效。

我知道我可以在代码中做到这一点(我正在用 XOJO 编写),但我想使用 SQLITE 来做到这一点...

我认为你只需要在随机之前按专辑顺序:

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

最简单的方法是使用临时 table(如果您想长时间播放这些歌曲,您可能不想临时使用)。 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;