我正在处理一个查询,以计算必须等待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分钟的时间时,您会遇到行不匹配的情况,并在查询中丢了一把扳手。
答案 0 :(得分:1)
您可以在没有子查询的情况下进行查询:
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