如何从同一记录中获得三维的max()?
描述: 我有一个很大的小部件列表,有多个属性,来自多个来源。想想手动数据输入,你有不同的人输入相同的东西,然后你需要巩固差异。虽然,我只想在某些标准下执行一些逻辑来选择一个值,而不是审核每个差异。
一个类似的例子:如果一个来源说小部件xyz重3磅,而b来说它重4磅,我只是盲目地拿4个,因为它更大,并说我需要过于谨慎包装/运输目的。这很简单,我选择MAX()。
现在,我有一组属于不同字段但相关的属性。想想盒子的尺寸。有宽度/长度/高度字段。如果一个消息来源说'尺寸'是2x3x4,而另一个消息来说他们是3x3x4,我需要采取更大的尺寸,原因与上述相同。听起来像MAX(),除了......
我的消息来源不同意宽度,高度或长度。一个2x3x4的盒子可以输入4x3x2或2x4x3,具体取决于源的外观。如果我使用3个这样的MAX这样的源,我最终会得到4x4x4,即使所有3个源都正确测量它。这是不可取的。
如何获取最大的“测量”值,但确保所有三个值都来自同一记录?
如果“最大”是不可能的,我们可以选择独特的...除了第四个源,其中大约40%的小部件有0x0x0。如果任何其他来源确实测量该小部件,我不能留下0x0x0。
一些示例数据
ID,widget_name,height,width,leng
(a1,widget3,2,3,4)
(b1,widget3,2,4,3)
(c1,widget3,4,3,2)
(d1,widget3,0,0,0)
输出应为(widget3,4,3,2)
答案 0 :(得分:3)
您可以使用row_number而不是group by like
select * from
(select data, ID,widget_name,height,width,leng, ROW_NUMBER() over ( partition by widget_name order by height + width + leng desc ) rowid
from yourTable
) as t
where rowid = 1