Я работаю над запросом, чтобы рассчитать процент пользователей, которые должны были ждать более 30 минут.Внешний запрос выбирает тип пользователей (существует 6 типов) и общее количество пользователей (сгруппированных по их user_type) за последние 30 дней.
Подзапрос предназначен для возврата количества всех пользователей, которые должны были ждать более 30 минут.
Проблема, с которой я сталкиваюсь, заключается в том, что в зависимости от клиники, иногда ни один пользователь не должен былподождите более 30 минут, поэтому я пропущу строки, и mysql будет просто бесконечно пытаться выполнить запрос
Я пытался использовать COALESCE и IFNULL, но они не возвращают 0, как мне хотелось бы, потому что мне также нужноиспользовать GROUP BY для того, чтобы разделить строки
Есть ли другой способ, чтобы строка, у которой нет результатов, возвращала 0, а не просто полностью исключалась?
Это мой запрос:
SELECT
user_type,
count(user_type) total_users,
(SELECT
count(user_type)
FROM
my_clinic
WHERE Appt_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
AND clinic = 'Baseball'
AND wait_time > 30
GROUP BY user_type) as total_over_thirty
FROM
my_clinic
WHERE Appt_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
AND clinic = 'Baseball'
GROUP BY user_type
Ожидаемый результат должен выглядеть примерно так
user_type total_users total_over_thirty
type1 300 25
type2 400 45
type3 600 15
type4 250 45
type5 300 15
type6 300 28
Но когда есть 0 пользователей, которые ждали менее 30 минут определенного типа user_type, вы получаете несоответствие строк, и онокидает гаечный ключ в запросе