Sql 显示计数函数不返回任何内容的日期
我的sql表如下所示,包含在该日期执行某些操作的用户列表:Sql 显示计数函数不返回任何内容的日期,sql,oracle,Sql,Oracle,我的sql表如下所示,包含在该日期执行某些操作的用户列表: | UPDATE_DATE | USER_ID | |-------------|---------| | 25/05/2021 | 3456 | | 25/05/2021 | 3456 | | 25/05/2021 | 56478 | 我想为过去3天生成一个不同的用户计数,其中计数为0,因此表中没有相应的日期,在表中以0显示该日期,即 | UPDATE_DATE| COUNT_USER_ID | |------
| UPDATE_DATE | USER_ID |
|-------------|---------|
| 25/05/2021 | 3456 |
| 25/05/2021 | 3456 |
| 25/05/2021 | 56478 |
我想为过去3天生成一个不同的用户计数,其中计数为0,因此表中没有相应的日期,在表中以0显示该日期,即
| UPDATE_DATE| COUNT_USER_ID |
|------------|---------------|
| 25/05/2021 | 2 |
| 24/05/2021 | 0 |
| 23/05/2021 | 0 |
但是,我的查询只返回表中可用的日期:
select UPDATE_DATE, count(distinct(USER_ID) as COUNT_USER_ID
from my_table
where UPDATE_DATE >= trunc(SYSDATE) - 3
group by UPDATE_DATE
| UPDATE_DATE| COUNT_USER_ID |
|------------|---------------|
| 25/05/2021 | 2 |
有没有办法将这些额外的缺失日期添加到我的表格中?您需要一个包含您感兴趣的所有日期的日历。CTE是实现这一点的简单方法。然后把它连接到你真正的桌子上,就这样
对于您发布的示例数据,它将是
SQL> select * from test;
UPDATE_DAT USER_ID
---------- ----------
25/05/2021 3456
25/05/2021 3456
25/05/2021 56478
SQL> with calendar (datum) as
2 (select trunc(sysdate) - level + 1
3 from dual
4 connect by level <= 3
5 )
6 select c.datum as update_date,
7 count(distinct t.user_id) count_user_id
8 from calendar c left join test t on t.update_date = c.datum
9 group by c.datum
10 order by c.datum desc;
UPDATE_DAT COUNT_USER_ID
---------- -------------
25/05/2021 2
24/05/2021 0
23/05/2021 0
SQL>
啊,对了,戈登。OP写得很好,我忽略了他们说的话;愚蠢的我。谢谢你,修好了。