我需要在同一个表中计算两个时间段内的两个数据。 我试过这样的事情:
SELECT COUNT(CASE
WHEN click_date='2011-06-20' THEN 0
ELSE 1
END) AS ThisDayCount, COUNT(1) ToDayCount
FROM MyTable
WHERE click_date BETWEEN '2011-05-01'AND 2011-06-20;
所以基本上我想从一天开始计算ThisDayCount并计算从2011-05-01到2011-05-20
click_date
是一个字符串。
答案 0 :(得分:5)
您就在那里,只需使用SUM
代替COUNT
:
select
sum(case when click_date='2011-06-20' then 0 else 1 end) as ThisDayCount,
count(1) ToDayCount
from MyTable
where click_date between '2011-05-01'and 2011-06-20;
答案 1 :(得分:5)
现有的解决方案是正确的,但不解释为什么你会看到这种现象。 SQL语句中的Count
返回查询中的非空值的数量。由于您的查询返回1或0,count
将使用这两个值。
这可以通过使用sum
添加列中的值(根据@Adrian的解决方案)或更改case
语句以返回null
来解决不计算(根据@ ypercube的解决方案)。
两种解决方案的表现大致相同,并且会返回相同的结果,所以这只是个人偏好的问题。
答案 2 :(得分:2)
SELECT COUNT( CASE
WHEN click_date='2011-06-20' THEN 1
ELSE NULL
END ) AS ThisDayCount
, COUNT(*) AS ToDayCount
FROM MyTable
WHERE click_date BETWEEN '2011-05-01' AND '2011-06-20' ;