繁体   English   中英

什么是 Postgres“全部”运算符?

[英]What is the Postgres "All" operator?

我正在阅读在 function 调用中包含all关键字的查询:

select count(all 97);
┌───────────┐
│ count(97) │
╞═══════════╡
│         1 │
└───────────┘
Elapsed: 11 ms

all (在子选择之外)在 postgres 中做什么? 我很难在文档中找到它。

ALL是“集合量词”以及聚合函数的DISTINCT 它在 SQL 标准 SQL-92 的第 6.5 节中定义。

这意味着需要考虑所有的值——就像在一个多重集中——而不仅仅是不同的值——就像在一个集中 它的默认行为是没有指定量词。

摘自 SQL-92:

 6.5 <set function specification>... <general set function>::= <set function type> <left paren> [ <set quantifier> ] <value expression> <right paren> <set function type>::= AVG | MAX | MIN | SUM | COUNT <set quantifier>::= DISTINCT | ALL Syntax Rules 1) If <set quantifier> is not specified, then ALL is implicit. ...

似乎这只是一种表达“默认行为”的明确方式,而不是做COUNT(DISTINCT...) 从文档:

 aggregate_name (expression [, ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ] aggregate_name (ALL expression [, ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]

聚合表达式的第一种形式为每个输入行调用一次聚合。 第二种形式与第一种形式相同,因为ALL是默认值 第三种形式为输入行中找到的表达式的每个不同值(或多个表达式的不同值集)调用一次聚合。 第四种形式为每个输入行调用一次聚合; 由于没有指定特定的输入值,它通常仅对 count(*) 聚合 function 有用。 最后一种形式用于有序集聚合函数,如下所述。

https://www.postgresql.org/docs/9.5/sql-expressions.html#SYNTAX-AGGREGATES

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM