postgres查询聚合函数不显示空值

时间:2015-04-18 15:55:41

标签: postgresql

我有这张桌子

id | present
------------
A | false
B | null
C | null
D | false
E | false

并执行此查询

SELECT array_agg(id)
FROM above_table
WHERE present IS NULL

我希望这会返回一行

B C

但我得到一个空行。

如果我这样做

SELECT array_agg(id)
FROM above_table
WHERE present = 'false'

我得到一排

A D E

关于为什么IS NULL没有返回数组的任何想法?

2 个答案:

答案 0 :(得分:1)

您的表格定义或测试有问题。

如果将列present定义为布尔值,并且id为B和C的行确实为NULL,那么您的第一个查询将给出您期望的内容。

我的控制台日志:

strobel=# create table quest (id character, present boolean);
CREATE TABLE
strobel=# insert into quest values ('A',false);
INSERT 0 1
strobel=# insert into quest values ('D',false);
INSERT 0 1
strobel=# insert into quest values ('E',false);
INSERT 0 1
strobel=# insert into quest(id) values ('B');
INSERT 0 1
strobel=# insert into quest(id) values ('C');
INSERT 0 1
strobel=# select * from quest order by 1;
 id | present 
----+---------
 A  | f
 B  | 
 C  | 
 D  | f
 E  | f
(5 Zeilen)

strobel=# SELECT array_agg(id) FROM quest WHERE present IS NULL;
 array_agg                                                            
-----------
 {B,C}
(1 Zeile)

答案 1 :(得分:1)

Works对我来说

DDL

CREATE TABLE above_table
    ("id" varchar(1), "present" boolean)
;

DML

INSERT INTO above_table
    ("id", "present")
VALUES
    ('A', false),
    ('B', NULL),
    ('C', NULL),
    ('D', false),
    ('E', false)
;

DQL

SELECT array_agg(id)
FROM   above_table
WHERE  present IS NULL;

输出

array_agg
B,C

我怀疑还有其他事情发生了。您是否认为可以在多个模式中使用相同的表名,并且您是从正确的模式中提取的?