Något så här borde fungera.
SELECT b.BrandName, COUNT(p.BrandId)
FROM tblBrand AS b
LEFT JOIN tblProduct AS p ON b.BrandId=p.BrandId
GROUP BY p.BrandId
ORDER BY b.BrandName
LIMIT 3;
5 svar · 583 visningar · startad av Icebreaker
Hej! Behöver lite hjälp med en SQL-fråga. Jag har 2 tabeller, en med märken och en med produkter. Nu vill jag, låt oss säga, lista ut de TOP 3 märken (BrandName) som innehåller flest produkter. Om flera märken har samma antal produkter kan vi sortera dem på BrandName ASC.
Så här ser tabellerna ut, lägger in lite exempeldata:
[U]tblBrand[/U]
BrandID BrandName
1 Converse
2 Adidas
3 Puma
4 Nike
[U]tblProduct[/U]
ProductID ProductName BrandID
100 Stan Smith 2
101 Court 6T5 4
102 Adi Racer 2
103 Drift Cat 3
104 Game Point 3
105 Duramo M 2
106 All Star 1
107 Classic 4
Resultatet av frågan bör i ovanstående fall bli:
Adidas
Nike
Puma
Förslag?
Något så här borde fungera.
SELECT b.BrandName, COUNT(p.BrandId)
FROM tblBrand AS b
LEFT JOIN tblProduct AS p ON b.BrandId=p.BrandId
GROUP BY p.BrandId
ORDER BY b.BrandName
LIMIT 3;
Denna funkar
SELECT b.BrandName, COUNT(p.BrandId) as ProdCount
FROM tblBrand AS b
LEFT JOIN tblProduct AS p ON b.BrandId=p.BrandId
GROUP BY p.BrandId
ORDER BY prodcount DESC, b.BrandName
LIMIT 3;
Edit: såg att GunnarD var snabbare, får skylla på att min version faktist är testad
snyggade till om min kod för att lättare se skillnaden
Tack för svaren, tror vi är på rätt väg här Glömde dock att säga att det är MS SQL (SP). Och som jag förstått så fungerar inte LIMIT-kommandot där. Antar att TOP 3 ska in någonstans istället? Googlade lite snabbt men fick inte fram någon vettig info =/
TOP skall alltid(?) vara direkt efter SELECT.
Jag har även för mig att MS SQL ogillar sortering på alias så det blir nånting i stil med
ORDER BY COUNT(p.BrandId) DESC, b.BrandName för att lösa sorteringen
Tack rhdf! Testade mig fram lite och detta verkar fungera:
SELECT TOP 3 b.BrandName, COUNT(p.BrandID)
FROM tblBrand AS b
LEFT JOIN tblProduct AS p ON b.BrandID=p.BrandID
GROUP BY p.BrandID, b.BrandName
ORDER BY COUNT(p.BrandId) DESC, b.BrandName