在POSTGRESQL上使用函数结果(平均值、最小值、最大值)执行操作
我有一个名为在POSTGRESQL上使用函数结果(平均值、最小值、最大值)执行操作,sql,postgresql,Sql,Postgresql,我有一个名为test的表,它只有一列pred 我想在[a,b]之间缩放这些值,在本例中为0和7 因此,我需要执行以下操作: Pn = a+(p - min(p))*(b-a)/(max(p)-min(p)) 当我尝试时: select (p-min(p))*(7)/(max(p)-min(p)) from test 它给出了一个错误: SQL错误[42803]:错误:列“test.p”必须出现在GROUP BY子句中或在聚合函数中使用 职位:9 创建相同表的代码如下所示: create ta
test
的表,它只有一列pred
我想在[a,b]之间缩放这些值,在本例中为0和7
因此,我需要执行以下操作:
Pn = a+(p - min(p))*(b-a)/(max(p)-min(p))
当我尝试时:
select (p-min(p))*(7)/(max(p)-min(p)) from test
它给出了一个错误:
SQL错误[42803]:错误:列“test.p”必须出现在GROUP BY子句中或在聚合函数中使用
职位:9
创建相同表的代码如下所示:
create table test(
p float
);
insert into test
values
(2),
(1),
(3),
(5),
(2)
聚合函数要求所有非聚合列都出现在
GROUP BY
子句中。可以使用窗口函数而不是常规聚合函数:
select
p,
(p-min(p) over())*(7)/(max(p) over() -min(p) over()) p_scale
from test
:
| p | p_scale |
| --- | ------- |
| 2 | 1.75 |
| 1 | 0 |
| 3 | 3.5 |
| 5 | 7 |
| 2 | 1.75 |
| p | p_scale |
| --- | ------- |
| 2 | 2 |
| 1 | 0 |
| 3 | 4 |
| 5 | 7 |
| 2 | 2 |
要将结果强制转换为整数,请执行以下操作:
select
p,
((p-min(p) OVER())*(7)/(max(p) over() -min(p) over()))::int p_scale
from test
:
| p | p_scale |
| --- | ------- |
| 2 | 1.75 |
| 1 | 0 |
| 3 | 3.5 |
| 5 | 7 |
| 2 | 1.75 |
| p | p_scale |
| --- | ------- |
| 2 | 2 |
| 1 | 0 |
| 3 | 4 |
| 5 | 7 |
| 2 | 2 |
欢迎@IurySousa,很高兴帮助您!我试图接受它,但我不得不等几分钟。