Jam*_*own 3 postgresql aggregate union
这可能是一个新手问题(请耐心等待),但是如何使用 SQL 和AVG
函数计算数字列表的平均值?我的意思是,我可以将 SQL 中的数字相加,例如:
SELECT 2+3+4
Run Code Online (Sandbox Code Playgroud)
我如何计算平均的2
,3
并4
没有将它们插入到表第一?
我尝试了不同种类的变体,例如:
SELECT 2 AS foo UNION 3 AS foo UNION 4 AS foo
foo
integer
1 2
2 3
3 4
Run Code Online (Sandbox Code Playgroud)
但:
SELECT AVG(SELECT 2 AS foo UNION 3 AS foo UNION 4 AS foo)
Run Code Online (Sandbox Code Playgroud)
错误:“选择”处或附近的语法错误
我似乎无法找到正确的语法。如果重要的话,我现在正在使用 PostgreSQL。
最佳解决方案取决于值的来源和形式。
unnest()
将 set 返回函数unnest()
与FROM
子句中的数组一起使用。对于长列表,这是最短的,但它是 Postgres 特定的解决方案。
SELECT avg(n) FROM unnest('{2,3,4}'::int[]) n;
Run Code Online (Sandbox Code Playgroud)
这是以下的简短语法:
SELECT avg(n) FROM unnest('{2,3,4}'::int[]) AS n(n);
Run Code Online (Sandbox Code Playgroud)
VALUES
或者,使用VALUES
表达式作为子查询。这是标准的 SQL。
SELECT avg(n)
FROM (VALUES (2),(3),(4)) t(n);
Run Code Online (Sandbox Code Playgroud)
UNION ALL
您可以使用更详细的SELECT ... UNION ALL SELECT ...
. 也是标准的 SQL。
SELECT avg(n)
FROM (
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 4
) t(n);
Run Code Online (Sandbox Code Playgroud)
使用,而不仅仅是,这会折叠重复项(您没有指定!),因此也相当昂贵。UNION ALL
UNION
请注意,示例中的所有数字文字都会integer
自动转换为(仅数字)。对于其他数据类型,您可能必须添加显式类型转换。avg()
退货 (根据文件):
numeric
对于任何整数类型参数,double precision
对于浮点参数,否则与参数数据类型相同
归档时间: |
|
查看次数: |
7003 次 |
最近记录: |