У меня есть таблица, где данные могут выглядеть так:Сортировка случайным образом с группировкой в PostgreSQL
ID | PARENT_ID | several_columns_to_follow
---+-----------+--------------------------
1 | 1 | some data
2 | 2 | ...
3 | 1 | ...
4 | 4 | ...
5 | 3 | ...
6 | 1 | ...
7 | 2 | ...
8 | 3 | ...
в соответствии с требованиями, мне нужно, чтобы сортировать двумя способами (по запросу пользователя):
1) Случайный порядок идентификаторов в последовательных родителей - это легко достигается с
SELECT * FROM my_table ORDER BY parent_id, random()
2) Случайный порядок идентификаторов в пределах случайным образом отсортированных родителей - и это, где я застрял. Очевидно, что просто сортировка всего на random()
будет не очень полезной.
Любые предложения? В идеале, в одном выражении SQL, но я готов пойти на более чем один, если необходимо. Объем данных невелик, поэтому я не беспокоюсь о производительности (в конечном итоге не будет больше 100 строк).
Точно. Было бы неплохо, что для такого рода вещей была некоторая параметризованная хеш-функция. – wildplasser
Да, это в значительной степени то, что мне нужно. И, да, использование крупнотонкой первичной доходности дает лучшие результаты. Я использовал 391939 в моем случае (просто случайное 6-значное простое число - каламбур не предназначен). –
Просто для удовольствия любая идея о том, как псевдослучайно сортировать таблицу со 100 000 000 записей за время, подходящее для веб-приложения? Скажем, менее 2 секунд? –