Это ваш запрос:
SELECT COUNT(*)
FROM (SELECT * FROM log LIMIT 40000)a
WHERE some_column = true
Подзапрос возвращает произвольный набор из 40000 строк.Этот набор отличается каждый раз, когда вы выполняете запрос.Если вам нужен канонический набор, вам нужно ORDER BY
с уникальными ключами сортировки.
После этого вы выполняете фильтрацию, поэтому число, соответствующее вашему условию, является произвольным.
Если вы хотите произвольный набориз 40000 строк, где условие истинно, просто выполните:
SELECT COUNT(*)
FROM (SELECT l.*
FROM log
WHERE some_column = true
LIMIT 40000
) ;
Если вы хотите случайный набор из 40000 строк, вы можете сделать:
SELECT COUNT(*)
FROM (SELECT l.*
FROM log
WHERE some_column = true
ORDER BY random()
LIMIT 40000
) ;
Произвольный <> случайный.(Примечание: это дорого; есть более дешевые способы получить случайный набор.).
Если вы хотите повторить выборку, ну, есть разные способы сделать это.Один из них - отсортировать по уникальному идентификатору и взять первые 40000 строк:
SELECT COUNT(*)
FROM (SELECT l.*
FROM log l
WHERE some_column = true
ORDER BY primary_key
LIMIT 40000
) ;
Это не случайный образец, а повторяемый образец.