SQL: использование SORT для группировки одинаковых значений при случайном смешивании разных значений - PullRequest
0 голосов
/ 19 февраля 2019

Допустим, у меня есть таблица 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)

1 Ответ

0 голосов
/ 19 февраля 2019

Один метод заключается в использовании 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...