可以将多个内联值传递给聚合函数吗?
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);
我可以直接在标量文字值上调用聚合函数,例如:
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);