我有一个数据集,每个账户的月薪都有一堆行。我们有6列-
薪资1、薪资2、薪资3、薪资4、薪资5和薪资6。
有时工资3,4,5,6,有时2没有人,有时没有人,因为他们失业。在本例中,字段中有0。
我需要做的是合并所有的薪水,从这些列中找出最大值和最小值---
Select
Greatest(Salary_1, Salary_2, Salary_3, Salary_4, Salary_5, Salary_6) as MaxSal,
Least(COALESCE(Salary_1, Salary_2, Salary_3, Salary_4, Salary_5, Salary_6),0) as MinSal
from
(select
sal1 as Salary_1, Select sal2 as Salary_2, Sal3 as Salary_3, sal4 as Salary_4, Sal5 as Salary_5, Sal6 as Salary_6
from ....)a
问题是,这返回的是max sal的正确值,而min返回的是0.00,因为这是最小值,但不允许忽略0s,但在这种情况下,0不是我想要的最小薪资值,我需要第二个最小值。
我尝试过将原始的sal1-sal6值设置为nullif 0,它返回null表示max,0表示min。
我还能看什么?与nullif相结合的coalesce对我不起作用,这是在前面的问题上所建议的。谢谢!
2条答案
按热度按时间r7s23pms1#
最大值和最小值不会像聚合函数那样忽略空值;你需要做点什么来避免他们。一种选择是这样的:
voase2hg2#
这可能是最简单的取消IVOT和聚合数据:
这绝对比巨人贵
case
表情。另一方面,它不太容易出错。真正的建议是修复数据模型。尝试将数组存储在多个列中通常是数据模型不好的标志。更合适的方法是每行一行
salary
而不是把它们放在不同的列中。