2017-03-21 4 views
0

Ich mache einige Übungsfragen mit den gegebenen Antworten meines Lehrers.SQL Practice: Multiple Order By

, was ich habe, so weit:

select Sup.supplierID, SupplierName, sum(OD.Quantity) 
as ItemSupplied from Suppliers as Sup 
inner join Products as P on Sup.SupplierID=P.SupplierID 
inner join OrderDetails as OD on 
P.ProductID=OD.ProductID 
group by Sup.supplierID order by ItemSupplied DESC, SupplierName ASC; 

Was Antwort meines Lehrers aussehen (die mit SupplierID):

enter image description here

Mein Problem ist, ich bin nicht die gleiche Antwort, die wie der Lehrer. Welchen Teil habe ich falsch verstanden?

Ich habe es durch Summe Wechsel() COUNT (DISTINCT [ProductID von Orderdetails]) und ORDER BY dieser COUNT (DISTINCT [ProductID von Orderdetails]) in DESC zuerst, dann Supplier in ASC:

select Sup.supplierID, SupplierName, count(DISTINCT OD.ProductID) 
as ItemSupplied from Suppliers as Sup 
inner join Products as P on Sup.SupplierID=P.SupplierID 
inner join OrderDetails as OD on 
P.ProductID=OD.ProductID 
group by Sup.supplierID order by ItemSupplied DESC, SupplierName ASC; 
+0

Was ist Ihre Antwort ? Bitte erklären Sie die genaue Abweichung – Luv

Antwort

2

Ich vermute, Ihr Lehrer sucht nach einer "Anzahl" der bereitgestellten Produkte, wie in der Anzahl der Artikel im Katalog. Nicht die Gesamtmenge der bestellten Artikel. Die Spezifikation ist nicht sehr klar.

SELECT s.supplierid 
     , s.suppliername 
     , COUNT(p.productid) AS cnt_items 
    FROM Products p 
    JOIN Suppliers s 
    ON s.supplierid = p.supplierid 
    GROUP 
    BY s.supplierid 
     , s.suppliername 
    ORDER 
    BY COUNT(p.productid) DESC 
     , s.suppliername ASC 

Wenn wir eine Anzahl der Elemente, die wollen .. die Anzahl der Produkte von einem Lieferanten bestellt wurden, die auf mindestens einer Reihenfolge erscheinen ...

SELECT s.supplierid 
     , s.suppliername 
     , COUNT(DISTINCT o.productid) AS cnt_items 
    FROM Products p 
    JOIN Suppliers s 
    ON s.supplierid = p.supplierid 
    JOIN OrderDetails o 
    ON o.productid = p.productid 
    GROUP 
    BY s.supplierid 
     , s.suppliername 
    ORDER 
    BY COUNT(DISTINCT o.productid) DESC 
     , s.suppliername ASC 
+0

Die COUNT (DISTINCT OD.ProductID) und Bestellung von ihm ist die Lösung für mein Problem, also danke –

0

Sie fehlen SupplierName in Ihrer Gruppe von. Die Abfrage sollte fehlschlagen.