2010-07-10 61 views
0

这的是一个基于MS SQL Server中2005SQL查询来发现的最大一组平均

首先Northwind数据库查询我得单价从OrderDetails表的平均水平,这组通过产品ID为该特定列单独并将其别名为AveragePrice。

然后我需要找到最大值(AveragePrice),它只是前一列的最大值,我该怎么做?对我来说,这是一种非常棘手的问题,它让我花了很多时间思考它。

select 
O.CustomerID, 
E.EmployeeID, 
E.FirstName+space(1)+E.LastName FullName, 
OD.OrderID, 
OD.ProductID, 

(select avg(DO.UnitPrice) from OrderDetails 
    DO where OD.ProductID = DO.ProductID 
    group by DO.ProductID) AveragePrice , 

from OrderDetails OD 
join Orders O 
on OD.OrderID = O.OrderID 

join Customers C 
on C.CustomerID = O.CustomerID 

join Employees E 
on E.EmployeeID = O.EmployeeID 

这不是一个家庭作业问题,我正在学习SQL,但我真的停留在这一点上,请帮助我。

回答

4

这2个步骤:“分组平均的未分组的最大”

您可以根据需要扩大这个它展示了如何在一个总

SELECT 
    MAX(AveragePrice) AS MaxAveragePrice 
FROM 
    (
    select 
     avg(UnitPrice) AS AveragePrice, ProductID 
    from 
     OrderDetails 
    group by 
     ProductID 
    ) foo 

顶部或与CTE

应用的集合
;WITH AvgStuff AS 
(
    select 
     avg(UnitPrice) AS AveragePrice 
    from 
     OrderDetails 
    group by 
     ProductID 
) 
SELECT 
    MAX(AveragePrice) AS MaxAveragePrice 
FROM 
    AvgStuff 
+0

在第一次执行时出错,请检查并确认。 选择 O.CustomerID, E.EmployeeID, E.FirstName +空间(1)+ E.LastName全名, OD.OrderID, OD.ProductID, (选择从订单明细AVG(DO.UnitPrice)通过DO.ProductID)AveragePrice DO其中OD.ProductID = DO.ProductID基, 选择最大值(AveragePrice)作为MaxAveragePrice从(选择AVG(ODD.UnitPrice)作为AveragePrice从订单明细ODD组由ODD.ProductID)ABA 从OrderDetails OD 加入Orders O on OD.OrderID = O.OrderID 加入客户C 上C.CustomerID = O.CustomerID 加入上E.EmployeeID = O.EmployeeID – user338292 2010-07-10 19:53:56

+0

很抱歉的坏格式,只需复制雇员e 和选择... – user338292 2010-07-10 19:54:30

+0

atrueguy选择它:我的答案是没有设计成用作子查询。它已完成 – gbn 2010-07-10 19:55:48