抱歉,标题标题不正确,但我有以下示例数据:
Account ID Name Order Value
1122 John 2000
1122 Dave 1500
对于数千个帐户(在我的学习示例中)。我想做的是按帐户ID分组以返回每个帐户的最大订单价值,但是我也对谁为每个帐户ID进行该订单的执行感兴趣。
我这样做如下:
SELECT Data.[Account ID], min(Data.Name), max(Data.[Order Value])
group by Data.[Account ID]
但是,这将返回Dave(由于min()函数),而不是Order值2000,正如我希望看到John的名字一样。如何获得与每个帐户的最大订单价值相关的名称?
您还可以在where not exists
子句中使用相关子查询:
select d.* from data d
where not exists
(
select 1 from data t where
t.[Account ID] = d.[Account ID] and
t.[Order Value] > d.[Order Value]
)
注意:
t
&d
是别名,允许Data
在同一查询中两次被引用。select 1
纯粹是为了优化:我们不在乎子查询返回的内容,只是它有记录(或者在这种情况下,没有记录)。或者,您可以使用当前方法计算最大值,然后将结果简单地加入原始数据集,例如:
select d.* from data d inner join
(
select t.[Account ID], max(t.[Order Value]) as mov
from data t
group by t.[Account ID]
) q on
d.[Account ID] = q.[Account ID] and
d.[Order Value] = q.mov
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句