使用1表显示0的SQL计数
我有一个名为requests的表,我想统计上周每天有多少列rideId不为null的请求。我有以下疑问:使用1表显示0的SQL计数,sql,Sql,我有一个名为requests的表,我想统计上周每天有多少列rideId不为null的请求。我有以下疑问: Select count(*), dayname(time) as Day from request where time >= (select current_timestamp - interval 7 day) and rideId is not null group by dayname(time) order by dayofweek(Day); 我怎样才能使它显示那些没有
Select count(*), dayname(time) as Day
from request
where time >= (select current_timestamp - interval 7 day) and rideId is not null
group by dayname(time)
order by dayofweek(Day);
我怎样才能使它显示那些没有rideId请求且计数应为0的日子
表是:Request(userId、time、rideId)将NOTNULL检查移动到您的计数中,并加入一个日历表以输入缺少的天数
SELECT
t1.dname,
COALESCE(t2.numRides, 0) AS numRides
FROM
(
SELECT 'Monday' AS dname, 2 AS dow UNION ALL
SELECT 'Tuesday', 3 UNION ALL
SELECT 'Wednesday', 4 UNION ALL
SELECT 'Thursday', 5 UNION ALL
SELECT 'Friday', 6 UNION ALL
SELECT 'Saturday', 7 UNION ALL
SELECT 'Sunday', 1
) t1
LEFT JOIN
(
SELECT DAYNAME(time) AS dname, COUNT(rideId) AS numRides
FROM request
WHERE time >= DATE_SUB(CURDATE(),INTERVAL 7 DAY)
GROUP BY DAYNAME(time)
) t2
ON t1.dname = t2.dname
ORDER BY t1.dow;
您可以发布您的表架构吗?您是否刚刚尝试删除了“rideID不为空”条件?如果一天内没有请求,则该天将不在结果集中,对吗?关于
ORDER BY
子句呢?哦。。是 啊我错过了。。编辑了我的答案
Select a.day, coalesce(b.cnt, 0) as cnt
from (--select all days here) a
left join
(select dayname(time) as day, count(*) as cnt
from requests
where some_condition
group by day) b
using a.day = b.day
order by day;