我有一个名为table1的表,其中包含以下列:-
ID count1 count2
A 3 5
B 1 7
C 2 9
我需要将count1和count2列的值设置为0到1。我需要根据数据大小来执行此操作。决赛桌应如下所示:-
ID count1 count2
A 1 0
B 0 0.5
C 0.5 1
我编写以下查询:-
select a.ID,
(((a.count1-min(a.count1))/(max(a.count1)-min(a.count1))),
(((a.count2-min(a.count2))/(max(a.count2)-min(a.count2)))
from table1 as a;
此查询使我对列ID出现了错误分组。
请协助在hiveql中执行此操作。
答案 0 :(得分:1)
这可以通过使用min
和max
窗口函数来完成。空的over()
子句将计算该列中所有值的汇总。由于窗口函数不是聚合函数,因此无需group by
。
select ID,
(count1-min(count1) over())/(max(count1) over()-min(count1) over()),
(count2-min(count2) over())/(max(count2) over() -min(count2) over())
from table1