可以将多个内联值传递给聚合函数吗?

Possible to pass multiple inline values to an aggregation function?

我可以直接在标量文字值上调用聚合函数,例如:

select SUM(2);
┌────────┐
│ sum(2) │
╞════════╡
│      2 │
└────────┘
Elapsed: 1 ms

有什么方法可以将多个内联值传递给一个聚合函数,例如:

SELECT SUM(1,2,3) 
SELECT SUM([1,2,3])
SELECT SUM((1,2,3))
etc.

我知道我可以使用 CTE 或 VALUES 子句或 FROM 中的其他内容来做到这一点,但我想知道它是否可以在没有 [=13= 的情况下直接使用] 条款。实际的数据库在这里并不重要。

你可以用variadic定义一个函数来传递多个参数。在后台,这样的参数是一个数组。

create function my_sum(variadic p_numbers integer[])
  returns bigint
as
$$
  select sum(i)
  from unnest(p_numbers) as u(i);
$$
language sql
stable;

然后您可以使用

调用它
select my_sum(1,2,3);
select my_sum(2,7);