gpt4 book ai didi

sql - 在 POSTGRESQL 上使用函数(AVG、MIN、MAX)的结果进行操作

转载 作者:行者123 更新时间:2023-11-29 12:49:23 25 4
gpt4 key购买 nike

我有一个名为 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 Error [42803]: ERROR: column "test.p" must appear in the GROUP BY clause or be used in an aggregate function

Position: 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

Demo on DB Fiddle :

| p   | p_scale |
| --- | ------- |
| 2 | 1.75 |
| 1 | 0 |
| 3 | 3.5 |
| 5 | 7 |
| 2 | 1.75 |

将结果转换为整数:

select 
p,
((p-min(p) OVER())*(7)/(max(p) over() -min(p) over()))::int p_scale
from test

Demo on DB Fiddle :

| p   | p_scale |
| --- | ------- |
| 2 | 2 |
| 1 | 0 |
| 3 | 4 |
| 5 | 7 |
| 2 | 2 |

关于sql - 在 POSTGRESQL 上使用函数(AVG、MIN、MAX)的结果进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57948223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com