每个聚合的文档:
every(expression):如果所有输入值都为真,则为真,否则为假
http://www.postgresql.org/docs/9.1/static/functions-aggregate.html
EVERY 在语义上等价于 COUNT(conditionIsTrue) = COUNT(*)
select person_id,
every(visited_site = 'http://stackoverflow.com') as visited_same_site_forever,
count(case when visited_site = 'http://stackoverflow.com' then '^_^' end)
= count(*) as visited_same_site_forever2
from z
group by person_id
order by person_id
输出:
person_id | visited_same_site_forever | visited_same_site_forever2
-----------+---------------------------+----------------------------
88 | f | f
55327 | t | t
256196 | f | f
数据源:
create table z(person_id int, visited_site varchar(100), datetime_visited timestamp);
insert into z values
(55327,'http://stackoverflow.com','Jan 1, 2010'),
(55327,'http://stackoverflow.com','Feb 14, 2012'),
(55327,'http://stackoverflow.com','May 1, 2012'),
(256196,'http://stackoverflow.com','February 1, 2012'),
(256196,'http://stackoverflow.com','February 2, 2012'),
(256196,'http://slashdot.org','May 2, 2012'),
(88,'http://theregister.co.uk','April 1, 2012'),
(88,'http://slashdot.org','April 2, 2012');