webForumDet fria alternativet

Hämta märken med mest produkter

Databaser & SQL

5 svar · 570 visningar · startad av Icebreaker

Medlem sedan juni 2000516 inlägg
Frågan#1

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? :)

Medlem sedan juni 20014 290 inlägg
#2

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;
Medlem sedan okt. 2007446 inlägg
#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

Medlem sedan juni 2000516 inlägg
#4

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 =/

Medlem sedan okt. 2007446 inlägg
#5

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

Medlem sedan juni 2000516 inlägg
#6

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

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)