Допустим, у меня есть таблица 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, a, e, e, e, d
, например.Я знаю, что мог бы использовать
SELECT songwriter FROM Songs GROUP BY songwriter ORDER BY RAND()
, а затем просто сформировать запрос для каждого автора песен в порядке возврата, но я действительно хотел бы просто использовать один запрос, чтобы иметь одну таблицу результатов.
Единственной идеей, которую я до сих пор имел, было упорядочивание по хеш-функции, которая выбирается случайным образом при каждом выполнении запроса.Это позволило бы тем же авторам песен появляться после друг друга, смешивая различные значения.Но это также кажется слишком сложным, и я не знаю, как реализовать выбор выбора хэша каждый раз хорошим способом.
Есть ли какой-нибудь чистый способ выполнить задачу только с одной таблицей результатов?Возможно ли сгруппировать, а затем снова разделить группы в одном запросе?
(я использую MySQL)