【问题标题】:Postgres: How to make NULL friendly MIN filtering in Having clause?Postgres:如何在Having 子句中进行NULL 友好的MIN 过滤?
【发布时间】:2021-10-07 17:01:47
【问题描述】:

audit_table 可能包含重复的userId。

我们有以下 SQL 查询

SELECT userId FROM audit_table
GROUP BY userId 
HAVING MIN(updatedDate) > ?;

updatedDate 字段可能为空,如果audit_table 中的所有行具体userId 仅包含空值,我看不到这些行,但我想要。 有没有办法实现它?

【问题讨论】:

  • or HAVING MIN(updatedDate) is null?

标签: sql postgresql group-by having having-clause


【解决方案1】:

一种方法是显式比较:

SELECT userId FROM audit_table
GROUP BY userId 
HAVING MIN(updatedDate) > ? OR MIN(updatedDate) IS NULL;

另一种方法是计算小于?或NULL的updatedDates:

HAVING COUNT(*) FILTER (WHERE updatedDate <= ?) = 0;

【讨论】:

  • 感谢您的回答。您能否为这些方法添加性能说明?附言在我原来的情况下,我只需要选择一个 userId
  • @gstackoverflow 。 . .从性能的角度来看,两者应该非常相似,但filter 可能会快一点。如果您只需要一个用户 ID,请提出一个新问题。可能还有其他方法。请务必包括匹配的行数和表格的大小。
猜你喜欢
  • 2021-10-07
  • 2017-11-02
  • 2017-09-30
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 2020-09-20
  • 2013-09-25
  • 1970-01-01
相关资源
最近更新 更多