2010-07-10 7 views
0

C'est une requête basée sur la base de données Northwind dans MS SQL Server 2005.requêtes SQL pour trouver le maximum d'un ensemble de moyennes

D'abord, je dois obtenir la moyenne des UnitPrice de la table OrderDetails, et le groupe il par ProductID pour cette seule colonne et l'alias AveragePrice.

Ensuite, j'ai besoin de trouver le maximum (AveragePrice) qui n'est rien d'autre que le maximum de la colonne précédente, comment puis-je le faire ??? C'est une sorte de très difficile pour moi, ça me prend des années pour y réfléchir.

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 

Ce n'est pas une question de devoirs, je apprends SQL, mais je suis vraiment coincé à ce moment-là, s'il vous plaît aidez-moi.

Répondre

4

Il est à 2 pas: « le maximum dissociées des moyennes groupées »

Vous pouvez étendre cette fonction des besoins qui montre comment appliquer un agrégat au-dessus d'un agrégat

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

Ou avec CTE

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

Si vous obtenez des erreurs lors de votre première implémentation, vérifiez et confirmez. sélectionner O.CustomerID, E.EmployeeID, E.FirstName + espace (1) + E.LastName FullName, OD.OrderID, OD.ProductID, (select avg (DO.UnitPrice) à partir de OrderDetails DO où OD.ProductID = groupe DO.ProductID par DO.ProductID) AveragePrice, select max (AveragePrice) sous la forme de MaxAveragePrice (select avg (ODD.UnitPrice) comme AveragePrice de OrderDetails groupe ODD par ODD.ProductID) ABA de OrderDetails OD joindre les commandes O sur OD.OrderID = O.OrderID rejoindre les clients C sur C.CustomerID = O.CustomerID rejoindre les employés E sur E.EmployeeID = O.EmployeeID – user338292

+0

Désolé pour la mauvaise mise en forme, il suffit de copier et sélectionnez-le, sélectionnez ... – user338292

+0

atrueguy: ma réponse n'a pas été conçu pour être utilisé comme sous-requête. c'est complet – gbn

Questions connexes