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 | |------

我的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 |
|------------|---------------|
| 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写得很好,我忽略了他们说的话;愚蠢的我。谢谢你,修好了。