Hao*_*Hao 6 database postgresql rdbms
每个聚合的文档:
every(expression):如果所有输入值都为true,则为true,否则为false
http://www.postgresql.org/docs/9.1/static/functions-aggregate.html
每个语义上等同于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
Run Code Online (Sandbox Code Playgroud)
输出:
person_id | visited_same_site_forever | visited_same_site_forever2
-----------+---------------------------+----------------------------
88 | f | f
55327 | t | t
256196 | f | f
Run Code Online (Sandbox Code Playgroud)
数据源:
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');
Run Code Online (Sandbox Code Playgroud)
EVERY()
用CASE
和模拟SUM()
实际上,本文描述了如何EVERY()
通过CASE
和模拟SUM()
.以下两个陈述是等效的:
SELECT EVERY(id < 10)
FROM book
SELECT CASE SUM(CASE WHEN id < 10 THEN 0 ELSE 1 END)
WHEN 0 THEN 1
ELSE 0
END
FROM book;
Run Code Online (Sandbox Code Playgroud)
EVERY()
窗函数也是如此:
SELECT
book.*,
EVERY(title LIKE '%a') OVER (PARTITION BY author_id)
FROM book
SELECT
book.*,
CASE SUM(CASE WHEN title LIKE '%a' THEN 0 ELSE 1 END)
OVER(PARTITION BY author_id)
WHEN 0 THEN 1
ELSE 0
END
FROM book;
Run Code Online (Sandbox Code Playgroud)
该SQL:2008
标准提到了EVERY
聚合函数:
10.9 <aggregate function>
[...]
<aggregate function> ::=
COUNT <left paren> <asterisk> <right paren> [ <filter clause> ]
| <general set function> [ <filter clause> ]
| <binary set function> [ <filter clause> ]
| <ordered set function> [ <filter clause> ]
<general set function> ::=
<set function type> <left paren> [ <set quantifier> ]
<value expression> <right paren>
<set function type> ::=
<computational operation>
<computational operation> ::=
AVG
| MAX
| MIN
| SUM
| EVERY
| [...]
Run Code Online (Sandbox Code Playgroud)
但是,"高级"SQL标准功能通常不是由数据库实现的.例如,Oracle 11g不支持它,SQL Server 2012也不支持它.
但是,使用HSQLDB,您可能会更幸运.HSQLDB 2.x非常符合标准,MySQLBIT_AND()
也知道聚合函数,它是EVERY()
Postgres支持的非标准别名.
注意,一些数据库允许编写用户定义的聚合函数,因此您也可以EVERY()
自己实现.
归档时间: |
|
查看次数: |
2880 次 |
最近记录: |