如何返回select语句的Max值

时间:2017-11-10 02:00:00

标签: sql-server aggregate-functions

好的,我要做的是返回select语句的最大值

该陈述写成

SELECT 
    SUM([Order Details].UnitPrice*[Order Details].Quantity) as total, 
    Products.SupplierID
 FROM [Order Details], Products GROUP By Products.SupplierID;

返回一个值列表,其中包含每个供应商从销售中获得的收入。

当我将语句更改为

SELECT 
    MAX([Order Details].UnitPrice*[Order Details].Quantity) as total, 
    Products.SupplierID
 FROM [Order Details], Products GROUP By Products.SupplierID;

它为每个供应商返回相同的值,这不是我想要的,我只希望该声明返回收入最高的SupplierID。

我会注意到这是一项任务但不是全部的事情

作业读取

在Northwind数据库中列出的所有供应商中,根据数据库中的所有订单找到总收入最高的供应商。

编写用户定义的标量函数MaxSupplier,输出单个值:根据上述规则选择的供应商名称。如果有多个供应商符合条件,请在这些候选人中随机选择一个。您可能需要研究SQL Server上可用的功能。

老实说,只是想知道如何获得最大值不关心其余任务的帮助

1 个答案:

答案 0 :(得分:1)

这里最简单的解决方案可能是TOP使用ORDER BY

SELECT TOP 1
    Products.SupplierID
    SUM([Order Details].UnitPrice*[Order Details].Quantity) AS total
FROM [Order Details], Products
GROUP BY
    Products.SupplierID
ORDER BY
    total DESC;

如果您使用的是早于2008的SQL Server版本,那么您必须在ORDER BY子句中重复完整的总和表达式。如果您还要返回所有与总数最高相关的记录,请使用:

SELECT TOP 1 WITH TIES

另一个注意事项是,您似乎正在两个表之间进行交叉连接。如果不是这样,那么请使用具有ON条件的显式联接。