Adventure Works SQL 服务器 2014 查询

Adventure Works SQL Server 2014 Enquiry

我正在使用 AdventureWorks 2014 数据库编写 SQL 查询。我想显示哪个员工的订单价值最高。

我试图单独编写每个 select 语句(见下文),但我希望能够将两个查询合并为一个:

select 
    s.SalesOrderID, s.SalesPersonID, COUNT(sd.SalesOrderID) as count 
from 
    Sales.SalesOrderHeader s, Sales.SalesOrderDetail sd
where 
    s.SalesOrderID = sd.SalesOrderID 
group by           
    sd.SalesOrderID, s.SalesOrderID, s.SalesPersonID 
order by 
    sd.SalesOrderID

select 
    sd.SalesOrderID, sd.LineTotal, count (sd.SalesOrderID) as count 
from 
    Sales.SalesOrderDetail sd
group by 
    sd.SalesOrderID, sd.LineTotal 
order by 
    sd.SalesOrderID

你在找这样的东西吗:

select top 1  
    s.SalesPersonID
    ,sum(sd.LineTotal ) as orderTotal
    s.salesorderid
from
    Sales.SalesOrderHeader s
    inner join  Sales.SalesOrderDetail sd
        on s.SalesOrderID = sd.SalesOrerID
group by 
    s.SalesPersonID
    s.salesorderid
order by
    orderTotal desc

在 SQL 服务器中,您可以使用 top 函数请求有限数量的行(如果排序正确,这可以为您提供最高的订单值)。这可以与分组依据一起使用,该分组依据将在分组依据的列中具有相同值的所有行总计加在一起。

这就是我要做的,以获取每个销售人员的总数。按 Sum(sd.LineTotal) 降序排序以获得最高值。

select s.SalesPersonID ,COUNT(sd.SalesOrderID) as count,sum(sd.LineTotal ) as orderTotal  
from Sales.SalesOrderHeader s 
Inner Join Sales.SalesOrderDetail sd ON s.SalesOrderID=sd.SalesOrderID 
group by s.SalesPersonID 
order by 3 Desc

感谢您的努力。但是,有一种更简单的方法可以得到您的答案。

SELECT 
-- TOP 1   //to get highest order total
 s.SalesPersonID
 ,COUNT(sd.SalesOrderID) as Total_Count
 ,sum(sd.LineTotal) as orderTotal  
FROM 
  Sales.SalesOrderHeader s Inner Join Sales.SalesOrderDetail sd 
  ON s.SalesOrderID=sd.SalesOrderID 
GROUP BY s.SalesPersonID 
HAVING s.SalesPersonID IS NOT NULL
ORDER BY sum(sd.LineTotal) desc

我正在做的是,通过 SalesOrderId 加入 SalesOrderHeaderSalesOrderDetail 并使用 aggregate functions 得到想要的结果。

Order by 用于首先获得最高值。 Top 1 用于仅获得所需的输出。