Sql server SQL Server:获取每个人的最大购买价值

Sql server SQL Server:获取每个人的最大购买价值,sql-server,max,Sql Server,Max,我有以下疑问 select C.Persona, C.Producto, Sum(C.Cantidad * P.Precio) [Total_Purchase] from Compras C join Precios P on C.Producto = P.Item group by C.Producto, C.Persona 它返回每个客户(角色)对每个产品的总购买量。 如何让它为每个客户和所涉及的产品带来最大总购买量?您可以使用Max()函数来实现这一

我有以下疑问

select 
    C.Persona, C.Producto, Sum(C.Cantidad * P.Precio) [Total_Purchase]
from
    Compras C 
join
    Precios P on C.Producto = P.Item
group by 
    C.Producto, C.Persona
它返回每个客户(角色)对每个产品的总购买量。 如何让它为每个客户和所涉及的产品带来最大总购买量?

您可以使用
Max()
函数来实现这一点。您可以将它添加到select中,即使使用了
SUM()
,它也可以工作

试试这个:

select 
     max(c.[Total_Purchase]), C.Producto ,C.Persona
from 
    (select 
         C.Persona, C.Producto, Sum(C.Cantidad*P.Precio) [Total_Purchase]
     from
         Compras C 
     join
          Precios P on C.Producto = P.Item
     group by 
         C.Producto, C.Persona) c
 group by 
     C.Producto, C.Persona

将总和聚合更改为最大值 或者两者兼而有之

select C.Persona,C.Producto,
        Sum(C.Cantidad*P.Precio) [Total_Purchase],
        MAX (C.Cantidad*P.Precio) [Total_Purchase
from
Compras C JOIN Precios P ON C.Producto=P.Item
group by C.Producto ,C.Persona

但是我不想要其他没有最大值的行。我不确定我是否遵循了你想要的。这听起来像是你在收回他们的购买总额,并想在另一列中查看他们最大的购买额。如果是这样的话,
MAX()
就是您想要的。如果没有,你能试着更好地解释一下吗?让我们在我的表格中说,对于Thomas,我有3行3种不同的产品(水、薯条、葡萄酒),每个产品在我的“总购买”栏中都有每种产品的总花费。我有杰瑞也与3个产品,但不同于托马斯,也与总花费。在这个例子中,我有6行(我的查询所带来的),但我只希望2行是Tom的最大购买量和它是什么产品,Jerry也是如此。要只返回两行,您可以按人分组,而不是按产品分组。因此,您可以通过从
组中删除
C.Producto
。一旦您这样做,在选择中使用
MAX()
将得到您想要的结果。如果您想要这两者,您现在拥有的,以及我们在这里讨论的一个人的最大值,那么您需要使用子查询。