SELECT
COUNT(
CASE WHEN ( DATE(igs.start_date) >= DATE('2020-05-01')
AND DATE(igs.start_date) <= DATE('2020-05-31')
THEN igs.id
ELSE 0
END
) AS totalSessions
FROM
`ignite_session` igs
我的要求是我想要一个特定月份的会话计数。从上面的查询中,我得到了错误的计数。当我检查下面的查询时,它是0。
SELECT
COUNT(id)
FROM
ignite_session igs
WHERE
DATE(igs.start_date) >= DATE('2020-05-01')
AND DATE(igs.start_date) <= DATE('2020-05-31')
第一个查询是复杂查询的一小部分。我不想在where语句中使用日期条件。请帮我查询这个案例陈述。 totalSessions
应返回0。
2条答案
按热度按时间qv7cva1a1#
你应该使用
NULL
在你的情况下。比如:
sql小提琴
mysql 5.6架构设置:
查询1:
结果:
gcxthw6b2#
下面是一个示例,说明当前查询在没有
COUNT
:所以用
COUNT
,它发现行被返回,这就是为什么你在你的totalSessions
即使你没有任何日期范围的数据。但是只要对查询稍加修改,就可以得到正确的结果。而不是COUNT
,使用SUM
. 比如这个例子:或者更简短的版本(类似于akina在评论中的建议):
这是一个演示。