Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用1表显示0的SQL计数_Sql - Fatal编程技术网

使用1表显示0的SQL计数

使用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); 我怎样才能使它显示那些没有

我有一个名为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);
我怎样才能使它显示那些没有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;