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

时间:2019-02-18 23:40:13

标签: mysql sql database

比方说,我有一张桌子Songs(标题,歌曲作者)。 我想获得一张歌曲列表,其中同一位词曲作者的歌曲出现在一个方块中。所以我只是排序:

SELECT * FROM Songs ORDER BY songwriter ASC

但是现在,如果不同的词曲作者不一定总是以相同的顺序出现,那就太好了。我想要一个输出,在这些输出中,歌曲作者将不会总是像

  

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

但也喜欢

  

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

例如。我知道我可以使用

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

然后按返回顺序对每个歌曲作者进行查询,但我真的很想只使用一个查询就拥有一个结果表。

到目前为止,我唯一的想法是通过哈希函数进行排序,该哈希函数每次执行查询时都会随机选择。这样一来,同一位词曲作者就可以相互出现,同时又可以混合使用不同的值。 但这似乎也太复杂了,我不知道如何每次都以一种不错的方式实现选择哈希。

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

(我正在使用MySQL)

1 个答案:

答案 0 :(得分: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中没有现成的可用简单哈希函数。