当前位置: 首页 > 知识库问答 >
问题:

当count(*)与任何记录不匹配时,需要查询返回零

翁建弼
2023-03-14
SELECT COUNT(*),TRUNC(TEST_DATE_CREATE) 
FROM TEST_TABLE 
WHERE TEST_DATE_CREATE > (SYSDATE - 10)
GROUP BY TRUNC(TEST_DATE_CREATE);

如果某个特定日期没有记录,我需要上面的查询返回计数0。这似乎没有发生。

我尝试了NVL,解码。发现这个问题是由于分组的子句,但不知道如何解决这个问题。

请帮忙!!

共有2个答案

汝开畅
2023-03-14

很难理解你想要什么,但是

select decode(count(*), 0, null, count(*)) 

当组中没有记录时,将返回null。

更新:现在更清楚你想要什么:

select date_code, cnt
from(
    select trunc(sysdate-10) + level - 1 as date_code
    from dual
    connect by level <= 10
    )
left join(
    SELECT COUNT(*) cnt,TRUNC(TEST_DATE_CREATE)  trunc_create
    FROM TEST_TABLE 
    WHERE TEST_DATE_CREATE > (SYSDATE - 10)
    GROUP BY TRUNC(TEST_DATE_CREATE);
) on trunc_create = date_code

更新2:现在更清楚你想要什么,零而不是空值:

select date_code, count(*) 
from(
    select trunc(sysdate-10) + level - 1 as date_code
    from dual
    connect by level <= 10
    )
left join TEST_TABLE on TRUNC(TEST_DATE_CREATE) = date_code
GROUP BY date_code;
伯和蔼
2023-03-14

您需要生成一个您感兴趣的日期列表,然后对表进行左外连接,以查找与每个日期匹配的记录。比如:

with tmp_dates as (
    select trunc(sysdate) - level + 1 as tmp_date
    from dual
    connect by level <= 10
)
select count(tt.test_date_create), td.tmp_date
from tmp_dates td
left join test_table tt on trunc(tt.test_date_create) = td.tmp_date
group by td.tmp_date
order by tmp_date;

公共表表达式本身生成日期列表:

select trunc(sysdate) - level + 1 as tmp_date
from dual
connect by level <= 10;

TMP_DATE
---------
10-JUN-13 
09-JUN-13 
08-JUN-13 
07-JUN-13 
06-JUN-13 
05-JUN-13 
04-JUN-13 
03-JUN-13 
02-JUN-13 
01-JUN-13 

您可以调整级别限制,以及如何将其添加到sysdate以修改范围,例如进一步回溯或排除今天。

然后,主select使用它来查找匹配的记录。因为它是一个外部连接,所以它会列出所有生成的日期,如果没有匹配项,则计数为零。

SQL小提琴。

 类似资料:
  • 问题内容: 我正在尝试使查询工作从表单控件获取值(有时只是字符串的第一部分)。我的问题是,仅在键入完整字符串时它才返回记录。 即在姓氏框中,我应该能够键入gr,它会弹出 绿灰色格雷厄姆 但是目前,除非使用完整的搜索字符串,否则它不会显示任何内容。 所涉及的表单上有4个搜索控件,并且仅当填写该框时才在查询中使用它们。 查询是: 问题答案: 有一种访问方法! 如果您在表单上具有“过滤器”控件,那么为什

  • 问题内容: 我在Elasticsearch中有一个小型数据库,出于测试目的,我想拉回所有记录。我正在尝试使用以下形式的网址… 有人可以给我您用来完成此操作的URL吗? 问题答案: 我认为支持lucene语法是这样的: 大小默认为10,因此您可能还需要获取10个以上的商品。(其中BIGNUMBER等于您认为大于数据集的数字) 但是,elasticsearch文档建议使用扫描搜索类型针对大型结果集。

  • 首先,我知道这个查询有点混乱,但它可以正常工作,直到至少有一条记录存在,并且设置为true,此时没有返回任何记录。如果有另一条记录的设置为false或两者的组合,则它可以正常工作,即返回的记录的所有票证总数都设置为0或适当的值。 我已将查询更新为,并将票证表联接更改为left(也尝试了full outer),但它仍然存在上述问题。 为什么会发生这种情况,我能做些什么来防止它?

  • 我正在运行一个gremlin匹配查询,该查询根据图的某些属性的值来限制结果。当我在gremlin控制台中运行查询时,我得到了91个与模式匹配的顶点。当我通过javascript websocket连接运行相同的查询时,只返回了64个。如果我向查询中添加.count(),则得到预期的91。是否有允许检索所有结果的设置? g、 V().match(_uu.as('Patient')。hasLabel(

  • 问题内容: 我每月都有一组职位。现在,我需要一个数组,其中包含每个月发布的帖子总数。我尝试下面的MySql查询,它的工作正常,但我期望0(零)几个月没有记录。在这里,它不返回0。 我读到COUNT()不会返回“ 0”,那么我该如何实现呢? 我尝试了IFNULL()和COALESCE(),但仍然得到相同的结果。请帮助此查询。谢谢你...... 结果: 预期结果(没有一月份的职位): 样本数据: 问题

  • 我有一个查询,我用了很长时间才找到。我在一个有500k行的表的单个分区上运行它。 查询如下所示: 我将其设置为,因此查询返回0行。 此查询大约需要30秒(如果我使用,则需要一分钟)。 当我运行完全相同的查询但使用时,需要2秒。 是什么原因导致查询在使用选择列时花费很长时间,而在使用选择计数(列)时不花费时间? 这是解释的问题 *项目[col0#607] -*过滤器(isnotnull(col1#6