单个查询中的多计数 - Oracle

Mar*_*rek 3 java sql oracle select

我需要计算同一个表中的两个数据2个时间段.我试过这样的事情:

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;
Run Code Online (Sandbox Code Playgroud)

所以基本上我想从一天算起ThisDayCount并计算从2011-05-01到2011-05-20

click_date 是一个字符串.

Adr*_*iro 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;
Run Code Online (Sandbox Code Playgroud)


All*_*lan 5

现有的解决方案是正确的,但不解释为什么你会看到这种现象.Count在SQL语句中返回查询中的非空值的数量.由于查询返回1或0,因此count将使用这两个值.

这可以通过使用sum添加列中的值(根据@Adrian的解决方案)或通过更改case语句来返回null不应计算的记录(根据@ ypercube的解决方案)来解决.

两种解决方案的表现大致相同,并且会返回相同的结果,因此这只是个人偏好的问题.