在PostgreSQL中,聚合和函数之间有什么区别?
聚合只是一种专门的功能吗?(聚合约束:参数必须是多集,返回值必须是单个值)
在可能出现聚合的地方,我可以在任何地方使用函数吗?
在使用PostgreSQL函数或聚合时,有什么特殊之处吗?
发布于 2022-07-07 06:58:12
聚合是函数的子集。
每个聚合也是一个函数(输入参数为array/set of values
类型,输出为single scalar value
类型)
您可以用任何其他聚合替换每个聚合--并得到不同的结果--但是如果用不聚合输入值的函数替换它,则可能会出现错误。
这个特性来自定义--聚合获取一个列表,对其值执行一些计算,并产生一个结果(这显然不是一个列表)。其他函数可能不适用于列表输入--例如,更低、更高、更小,等等。
发布于 2022-07-08 04:00:05
差异取决于视角。内部聚合函数被执行为重复调用“累积”函数(读取值并更新状态累积值)和“最终”函数(将累积值转换为最终结果)。从用户的角度来看,聚合函数也是函数,但目的和用法不同。聚合函数和标量函数是不可替换的。不能在应该使用聚合函数的地方使用标量函数,也不能使用聚合函数,因为应该使用标量函数。聚合函数跨行计算,标量函数仅计算每一行。聚合函数和标量函数的语法是相同的,但是其他的都有很大的不同。
发布于 2022-07-08 05:29:35
是的,聚合函数是专门的。考虑几乎任何SQL文档,在大多数(希望是所有文档)中,您都会找到包含多种函数类型的函数的引用。其中一个类型是“聚合函数”。从示例列表中:
Chapter 9. Functions and Operators
Table of Contents
9.1. Logical Operators
9.2. Comparison Functions and Operators
9.3. Mathematical Functions and Operators
9.4. String Functions and Operators
9.5. Binary String Functions and Operators
9.6. Bit String Functions and Operators
9.7. Pattern Matching
9.8. Data Type Formatting Functions
9.9. Date/Time Functions and Operators
...
9.21. Aggregate Functions
(摘录于PostgreSQL 14)参见函数和聚合函数 (当前版本链接)
您可以用一个聚合函数代替另一个聚合函数,例如,您可以使用MIN(column1)
交换MAX(column1)
,而不会导致语法错误--但显然结果可能非常不同。但是,不可能仅仅用任何函数来代替聚合。
“在可能出现聚合的地方,我可以在任何地方使用函数吗?”
从这个意义上说,您可以“交换”任何函数(正如已经讨论过的那样),但是可以在group by
查询中包括非聚合函数,例如:
select date_trunc('month', datecolumn), sum(quantity)
from table1
group by date_trunc('month', datecolumn)
“在使用PostgreSQL函数或聚合时,有什么特殊之处吗?”
是和不。完全符合SQL标准的函数(例如MIN/MAX/SUM/COUNT)就是“符合标准”的函数。然而,在其他数据库管理系统(如jsonb_object_agg()
)中确实存在更多的外来函数。使用文档来探索许多可用的函数。
一个非常有用的专门化Postgres函数(它返回一个“集”)是generate_series()。
generate_series ( start timestamp, stop timestamp, step interval )
请参阅:9.25。集合返回函数
注意:函数也可以是“用户定义的”(即由用户构建的)。因此,您可以使用的全部功能列表也可能包括其中的一些功能,这些功能将是“高度专业化的”,因为它们可能是您的组织所特有的。
https://stackoverflow.com/questions/72892937
复制相似问题