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 · 570 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
:bire