Wei*_*ier 2 sql database postgresql
当我想测试一些PostgreSQL函数的行为时,FOO()我发现执行查询很有用SELECT FOO(bar),bar是一些我用作直接输入的数据,而不必SELECT从真正的表中执行.
我读过我们可以在FROM语句中省略该子句,SELECT 1但我不知道多个输入的正确语法.我试过SELECT AVG(1, 2),例如,它不起作用.
我怎样才能做到这一点 ?
使用PostgreSQL,您可以使用VALUES表达式生成内联表:
VALUES计算值表达式指定的行值或行值集.它最常用于在较大的命令中生成"常量表",但它可以单独使用.
强调我的.然后,您可以将聚合函数应用于"常量表":
select avg(x)
from (
values (1.0), (2.0)
) as t(x)
Run Code Online (Sandbox Code Playgroud)
或者只是select expr如果expr不是聚合函数:
select sin(1);
Run Code Online (Sandbox Code Playgroud)
您还可以定义自己的avg函数,该函数在数组上运行并在函数内隐藏FROM:
create function avg(double precision[]) returns double precision as $$
select avg(x) from unnest($1) as t(x);
$$ language 'sql';
Run Code Online (Sandbox Code Playgroud)
然后:
=> select avg(array[1.0, 2.0, 3.0, 4.0]);
avg
-----
2.5
Run Code Online (Sandbox Code Playgroud)
但除非你经常这样做,否则这只会变得愚蠢.
此外,如果您使用的是8.4+,则可以编写可变参数函数并取消该数组.内部与数组版本相同,您只需添加variadic到参数列表:
create function avg(variadic double precision[]) returns double precision as $$
select avg(x) from unnest($1) as t(x);
$$ language 'sql';
Run Code Online (Sandbox Code Playgroud)
然后在没有数组的情况下调用它:
=> select avg(1.0, 1.2, 2.18, 11, 3.1415927);
avg
------------
3.70431854
(1 row)
Run Code Online (Sandbox Code Playgroud)
感谢depesz 指向 PostgreSQL中的变量函数支持的round-through- go -google指针.
| 归档时间: |
|
| 查看次数: |
1375 次 |
| 最近记录: |