У меня нет ссылки на документацию для этого, но эмпирически я смог определить, что MySQL, по-видимому, оценивает rand()
после того, как агрегат GROUP BY
завершен.То есть он оценивает rand()
один раз для группы , а не один раз для каждой записи в таблице.Я настроил следующий тест:
WITH yourTable AS (
SELECT 1 AS id, 3 AS val UNION ALL
SELECT 1, 5 UNION ALL
SELECT 2, 10
)
SELECT id, SUM(val) AS val_sum, rand()
FROM yourTable
GROUP BY id;
Демо
Чтобы убедиться, что режим ONLY_FULL_GROUP_BY
был включен, я изменил запрос на этоти это не удалось:
SELECT id, SUM(val) AS val_sum, rand(), val -- non aggregate column = failure
FROM yourTable
GROUP BY id;
Итак, ваш текущий подход заключается в выборе случайных значений для каждой группы.Обратите внимание, что даже если было , выбрав случайные значения для каждой записи, а затем выбрав определенную минимальную запись, значения все равно должны быть случайными.