如何跨多个字段执行聚合函数逻辑?

How can I perform aggregate function logic across multiple fields?

如何从同一条记录中获取三个维度的 max()?

说明: 我有大量来自多个来源的具有多个属性的小部件列表。想想手动数据输入,不同的人输入相同的内容,然后您需要合并差异。虽然,我不想审核每个差异,但只想执行一些逻辑以根据特定条件选择一个值而不是另一个值。

一个类似的例子:如果一个来源 a 说 widget xyz 重 3 磅,而来源 b 说它重 4 磅,我只是盲目地接受 4,因为它更大,并且说我需要过度谨慎出于 packing/shipping 目的。这很简单,我选择 MAX()。

现在,我有一组在不同字段中但相关的属性。想想盒子的尺寸。有 width/length/height 个字段。如果一个消息来源说 'dimensions' 是 2x3x4,而另一个消息来源说它们是 3x3x4,出于与上述相同的原因,我需要取较大的。听起来也像 MAX(),除了...

我的消息来源不同意宽度、高度或长度。一个 2x3x4 的框可以输入 4x3x2 或 2x4x3,这取决于源如何看待它。如果我取 3 个这样的源中的最大值,我最终会得到 4x4x4,即使所有 3 个源都正确测量了它。这是不可取的。

如何获取最大的 'measurement' 值,但确保所有三个值都来自同一条记录?

如果 'greatest' 不可能,我们可以满足于唯一...除了有第四个来源,它有大约 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)

你可以使用 row_number 而不是按喜欢分组

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