mysql - IFNULL 什么都不返回,而不是 0,有什么方法可以使它工作?
问题描述
我正在做一个查询来计算必须等待超过 30 分钟的用户的百分比。外部查询选择过去 30 天的用户类型(有 6 种类型)和用户总数(按 user_type 分组)。
子查询旨在返回必须等待超过 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 个用户等待特定 user_type 的时间不到 30 分钟时,您会得到行不匹配,并且会在查询中引发问题
解决方案
您可以在没有子查询的情况下进行查询:
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
推荐阅读
- php - 可以在一个命令(PDFTK 和 PHP)中加入 pdf 表单、填写和使用直通吗?
- javascript - TypeError [ERR_INVALID_ARG_TYPE]:“listener”参数必须是函数类型。收到未定义
- wpf - MahApps.Metro IOException:找不到资源'styles/colors.xaml'
- regex - 正则表达式匹配字符不在 2 个特定字符或单词之间
- xml - OSB 将字符串转换为 DateTime(xsl 或 xquery)
- python - 在 Pycharm 中调试 Tornado Web 服务器
- javascript - 如果我在 Vue.js 中使用问号运算符返回值,为什么会出现此错误
- mysql - 为什么这个简单的 sql 事务在持有 X 锁之后还想要一个 S 锁?
- c# - 异步/等待任务不返回值
- python - 如何在 python 调试器中列出/跳过断点?