Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在POSTGRESQL上使用函数结果(平均值、最小值、最大值)执行操作_Sql_Postgresql - Fatal编程技术网

在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,很高兴帮助您!我试图接受它,但我不得不等几分钟。