在PostgreSQL,如果我想的百分比我只是写:PortgreSQL - 函数来计算百分比
select x/sum(x) over() ...
因为里面聚集函数不守规矩它不工作的功能。
我试图找到一个解决方案,但没有成功。 这是我真正需要的简单版本,但我相信这个问题的解决方案肯定会指向正确的方向。
更多的细节......
如果我创建这个简单的表:
create table ttt(v1 numeric, v2 numeric);
insert into ttt values (2,1),(5,2),(10,4);
如果我运行:
select v1/sum(v1) over() from ttt; --returns relative frequencies
我得到:
select v1/sum(v1) over() from ttt;
?column?
------------------------
0.11764705882352941176
0.29411764705882352941
0.58823529411764705882
(3 rows)
现在
,如果我想创建一个函数,它做同样的事情,我会写:
create or replace function rfreq (double precision)
returns double precision
AS
'
select
$1/sum($1) over()
'
LANGUAGE 'sql';
我得到:
select rfreq(v1) from bruto;
rfreq
-------
1
1
1
(3 rows)
PostgreSQL是不是一个函数内部总结。
有什么建议吗? 谢谢, 阿里。
无法撕一些聚集函数或窗函数的给盒装SQL函数。它不受支持。 –
是的,我意识到这一点。但我觉得奇怪的是,没有(简单的)方法来构建函数来计算百分比。我很确定很多人会使用它。它本身很有用,并且包含在更复杂的结构中。 – Ali
@ user2895901 - 它可能很好,但它不是通常的用户请求。但这不是不可能的 - 如果我明白了,你会创建一个自定义窗口函数。你可以用C编写自己的文件,或者你可以使用PL/v8语言,它支持自定义窗口函数http://pgxn.org/dist/plv8/1.3.0/doc/plv8.html –