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
加入 SalesOrderHeader
和 SalesOrderDetail
并使用 aggregate functions 得到想要的结果。
Order by
用于首先获得最高值。 Top 1
用于仅获得所需的输出。
我正在使用 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
加入 SalesOrderHeader
和 SalesOrderDetail
并使用 aggregate functions 得到想要的结果。
Order by
用于首先获得最高值。 Top 1
用于仅获得所需的输出。