【问题标题】:count(timestamp) to return 0 DB2计数(时间戳)返回 0 DB2
【发布时间】:2020-11-05 16:40:53
【问题描述】:

我一直在努力寻找答案,但我发现和尝试的方法似乎不起作用,或者我做错了什么。

例如,我们有 2 个表:

Table Messages:
Int: id
Date: create_timestamp 
String: join_number

Table Map: 
String: entity_name 
String: join_number

我正在尝试计算 create_timestamps 并按 Entity_name 对其进行分组,因此查询是:

select count(create_timestamp) as count , entity_name from Messages left join Map on Messages.join_number = Map.join_number group by entity_name

查询工作正常,除了一个问题,如果没有找到时间戳,它不会返回结果为 0 的实体。如果什么也没找到,我需要它返回 entity_name 和结果 0。

我尝试像这样使用 COALESCE 进行查询:

select COALESCE(count(create_timestamp), 0) as count , entity_name from Messages left join Map on Messages.join_number = Map.join_number group by entity_name

但它仍然不返回 0 值。请记住,这是一个 DB2 数据库,非常欢迎任何 cmets、问题或答案。

【问题讨论】:

  • 使用Map left join Messages 而不是Messages left join Map
  • 您好,谢谢您的建议!只是尝试过,不幸的是仍然得到相同的结果:(
  • 检查以下example

标签: count db2 left-join coalesce


【解决方案1】:

事实证明马克的回答是正确的。我在查询中犯了一个错误,因为我还包括了条件“时间戳 > 时间戳(xxxx)”,这导致查询不包括那些 0 结果。如果有人觉得它有帮助,如果您想选择时间戳,正确的查询是:

select count(timestamp) as count, entity_name from Map left join Messages on timestamp > timestamp('2020-01-01') and Messages.join_number = Map.join_number group by entity_name

再次感谢!

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多