Возвращается NULL
, где total
больше 5, потому что вы указали это с помощью HAVING count(apd.id) < 5
, что означает, что подзапрос вернет ничего , если он больше 5, в результате NULL
значение для этой конкретной строки.
Если вам не нужно такое поведение, удалите ограничение HAVING
в подзапросе.
Этот запрос извлекает данные из нескольких таблиц, поэтому индексируйте по lastopen
вusers
не сильно поможет.Я бы создал индексы для столбцов, которые используются в предложении JOIN
ON
.
ОБНОВЛЕНИЕ
Чтобы получить желаемый результат, попробуйте:
SELECT
u.userid, u.lastopen,
r.auto_renew_status, r.product_id, r.is_trial_period,
FROM users as u
JOIN receipt as r ON u.userid = r.id
JOIN (
SELECT id, count(apd.id) FROM apple_purchase_details
GROUP BY id
HAVING apd.id > 5
) as apd ON apd.id = u.userid
WHERE r.is_trial_period = 'false' and r.auto_renew_status = 0