Guten Tag Leute, ich habe mit diesem für den letzten Tag gekämpft und ich kann einfach nicht scheinen, es herauszufinden.Holen Sie sich das meistverkaufte Produkt für jedes Land von NORTHWIND Datenbank
Meine Aufgabe ist es, die am meisten verkaufte Produkt für jedes Land von der beliebten Open-Source-Datenbank namens NORTH abzuleiten: https://northwinddatabase.codeplex.com
konnte mich auf diese Bühne bekommen, hier ist mein Code in SQL Server:
--Get most sold product for each country
WITH TotalProductsSold AS
(
SELECT od.ProductID, SUM(od.Quantity) AS TotalSold
FROM [Order Details] AS od
GROUP BY od.ProductID
)
SELECT MAX(TotalProductsSold.TotalSold) AS MostSoldQuantity, s.Country --,p.ProductName
FROM Products AS p
INNER JOIN TotalProductsSold
ON TotalProductsSold.ProductID = p.ProductID
INNER JOIN Suppliers AS s
ON s.SupplierID = p.SupplierID
GROUP BY s.Country
ORDER BY MostSoldQuantity DESC
das gibt mir das folgende Ergebnis:
das ist alles gut ist, aber ich wünschte, ou zu finden t Der Produktname für die MostSoldQuantity.
Vielen Dank!
PS Ich habe einen Kommentar --p.ProductName, wo ich dachte, es würde funktionieren, aber es nicht und wenn jemand mir erklären könnte, warum GROUP BY nicht automatisch erlauben, den Produktnamen für die Zeile abzuleiten, die großartig wäre
Ich nehme an, Sie wissen, dass Ihre vorgeschlagene Antwort nicht funktioniert, wie Sie es gelöscht haben. Der wichtige * Grund * ist, dass die 'MAX (productID)' überhaupt nichts mit 'MAX (TotalSold)' zu tun hat, sie werden unabhängig voneinander berechnet. (Sie erstellen den Datensatz, Sie erstellen Gruppen innerhalb des Datensatzes, innerhalb jeder Gruppe erhalten Sie den höchsten TotalSold und separat erhalten Sie den höchsten Wert von ProductID. Es gibt keinen SQL-Ausdruck für * "ermitteln Sie die Produkt-ID, die dem zugeordnet ist." Ergebnis von 'MAX (TotalSold)' wie in einem anderen Ausdruck in der SELECT-Liste berechnet "*). – MatBailie
Ja, ich habe festgestellt, sobald ich die Produkt-IDs nicht zu den meistverkauften Menge –
Ich schaue auf Ihre Antwort jetzt, danke für Ihre Zeit :) –