SQL计数使用1个表显示0

时间:2018-04-19 03:58:40

标签: sql

我有一个名为requests的表,我想要计算上一周每天列rideId不为空的请求数。我有以下查询:

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的日子

表是:请求(userId,time,rideId)

2 个答案:

答案 0 :(得分:1)

将非空检查移动到您的计数中,并加入日历表以引入缺失的日期。

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;

答案 1 :(得分:0)

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;