为空时 Postgresql 返回 0

Mic*_*mon 10 postgresql postgresql-9.3

我正在尝试使用运行查询,MAX()但我的问题是,如果该字段包含一个NULL值,则数据不返回任何内容。更新表不是一个选项,那么这个查询应该如何重写以返回 0 时NULL

下面的示例 DDL - 我硬编码了一个WHERE不返回任何内容的子句,仅用于说明目的,理想情况下我想为用户返回所有usernames和最高logincount

CREATE TABLE Test 
(
 username varchar(50) not null,
 logincount int,
 logindate Date
);

Insert Into Test (username, logincount, logindate) 
VALUES
('er11', 1, '2017-01-01'), ('er11', 2, '2017-01-02'), ('ff12', NULL, NULL)
,('jb88', 1, '2017-01-09');

With maxlogincount As
(
    select max(logincount) As "MaxLoginCount"
    ,username
    FROM Test
    GROUP BY username
)
Select
username
,logincount
,logindate
FROM Test t
inner join maxlogincount mlc
ON t.username = mlc.username
And mlc."MaxLoginCount" = t.logincount
WHERE t.username = 'ff12'
Order by t.username asc
Run Code Online (Sandbox Code Playgroud)

McN*_*ets 15

使用max(coalesce(logincount, 0))以避免空值

根据Postgres 文档(9.6)

COALESCE 函数返回它的第一个不为空的参数。仅当所有参数都为 null 时才返回 Null。当检索数据进行显示时,它通常用于替换空值的默认值,例如:

  • 如果没有行匹配 `WHERE` 子句,这仍然会返回 NULL。如果不需要,请改用coalesce(max(logincount),0)。 (2认同)