, но иногда возвращается NULL
и я должен добавить к этому, что он иногда возвращает более 1 строки, верно?в данных образца есть 6 строк, поэтому столбец row_num
будет иметь значение от 1 до 6.Это:
floor(random() * 10)
создает случайное число от 0 до 0,9999 ...Вы должны использовать:
floor(random() * 6 + 1)::int
, чтобы получить случайное целое число от 1 до 6.Но это не решило бы проблему, потому что предложение WHERE выполняется один раз для каждой строки, поэтому есть случай, когда row_num
никогда не совпадет с созданным случайным числом, поэтому он вернет ничто , или егобудет соответствовать более одного раза, поэтому он вернет более 1 строки .Смотрите демо .Правильный (хотя иногда и не самый эффективный) способ получения случайной строки:
SELECT id FROM test_tbl ORDER BY random() LIMIT 1
Также проверьте другие ссылки из SO, например: быстрый выбор случайной строки в Postgres