SQL:使用SORT将相同的值组合在一起,同时随机混合不同的值

问题描述 投票:-1回答:1

假设我有一张桌子歌曲(标题,词曲作者)。我想得到一个歌曲列表,其中同一个作曲家的歌曲出现在一个块中。所以我只是排序:

SELECT * FROM Songs ORDER BY songwriter ASC

但是现在如果不同的词曲作者不会总是出现在同一个顺序中会很好。我想要一个输出,其中歌曲作者不会总是这样订购

a,a,a,b,c,c,d,e,和e

还喜欢

b,c,c,a,a,和,和d

例如。我知道我可以使用

SELECT songwriter FROM Songs GROUP BY songwriter ORDER BY RAND()

然后在返回的顺序中为每个词曲作者形成一个查询,但我真的只想使用一个查询来获得一个结果表。

我到目前为止唯一的想法是通过哈希函数进行排序,每次执行查询时都会在随机基础上选择哈希函数。这会让同一个词曲作者在混合不同的值时相互出现。但它似乎也太复杂了,我不知道如何以一种很好的方式实现选择哈希。

是否有任何干净的方法只用一个结果表来完成任务?是否可以GROUP,然后在一个查询中再次拆分组?

(我正在使用MySQL)

mysql sql database
1个回答
1
投票

一种方法是使用rand()但在FROM子句中的子查询中:

SELECT *
FROM Songs s JOIN
     (SELECT songwriter, rand() as rnd
      FROM (SELECT DISTINCT songwriter FROM s) s
     ) ss
     ON ss.songwriter = s.songwriter
ORDER BY ss.rnd, ss.songwriter ASC;

您也可以对值进行哈希处理,但我认为MySQL中没有一个简单的哈希函数可供使用。

© www.soinside.com 2019 - 2024. All rights reserved.