IFNULL не возвращает ничего, кроме 0, есть ли способ заставить это работать? - PullRequest
0 голосов
/ 27 ноября 2018

Я работаю над запросом, чтобы рассчитать процент пользователей, которые должны были ждать более 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, вы получаете несоответствие строк, и онокидает гаечный ключ в запросе

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете сделать запрос без подзапроса:

SELECT
  user_type,
  count(user_type) total_users,
  sum(if (wait_time>30, 1, 0)) as total_over_thirty
FROM my_clinic
WHERE Appt_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() AND clinic = 'Baseball'
GROUP BY user_type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...