Hoi,

Ik ben bezig mijn statistiekenscript uit te breiden. Leden kunnen hun favoriete genre kiezen dmv een dropdownbox. Ik wil het meest voorkomende genre selecteren en weergeven, hoe doe ik dat?
Uit mijn hoofd:

SELECT genre, COUNT(genre) AS aantal
FROM tabel
ORDER BY aantal DESC
LIMIT 1
Volgens mij werkt het (dat zie ik pas als er meer leden zijn ;)).
het enige was dat ORDER BY vervangen moest worden door GROUP BY.
@jan:
het kan volgens mij nog korter:

SELECT MAX (genre) AS aantal
FROM tabel
LIMIT 1

Heb het niet getest, maar dit lijkt me meer zoals het hoort

@Simon: beetje jammer dat we dezelfde naam hebben, lijkt me erg verwarrend!
Het is niet de eerst simon (ook niet de 2e :P), verder klopt jou query niet, want dan krijg je alleen de hoogste scrore, niet welke het meest in de tabel staat.
Jan zijn oplossing lijkt me correct, alleen moest er een GROUP BY bij, niet de ORDER BY vervangen.

Dus:
SELECT genre, COUNT(genre) AS aantal
FROM tabel
GROUP BY aantal
ORDER BY aantal DESC
LIMIT 1;

SELECT 
  genre, 
  COUNT(genre) AS aantal
FROM 
  tabel
GROUP BY 
  genre
ORDER BY 
  aantal DESC
LIMIT 1

Volgens mij moet dit hem zijn. GROUP BY is verplicht omdat COUNT een agregate functie is.

Verder gebruik je ORDER BY en LIMIT om er voor te zorgen dat je slechts 1 resultaat krijgt,, namelijk de meest voorkomende.

MAX is alleen bruikbaar wanneer wanneer er in de records een getal staat, bv. 3, 4 en 5, dan zal bij het gebruik van MAX() de waarde 5 als resultaat worden gegeven. Deze functie kijkt dus naar de inhoud van een record, niet hoevaak een bepaalde waarde voorkomt. Dat kun je tellen met COUNT().

Edit: Ik had tussentijds even moeten refreshen, nu heeft W-J dezelfde oplossing al gegeven. Gelukkig zijn we het met elkaar eens. ;)
Sorry, het wordt te laat denk ik. Ik had gewoon niet goed gelezen!:S
Er zijn hier 13 simon's geregistreerd...

btw er zit een klein verschil in de query van Willem-Jan en Frank:
GROUP BY aantal
GROUP BY genre
@Boaz: Ik zie het nu ook! Je moet die van mij hebben, die GROUPt BY op het genre en dat is ook precies de bedoeling.

Een GROUP BY op het resultaat van de COUNT() zal niet gaan en levert ook nog eens een foutmelding op. Dit omdat het hier om een agregate functie gaat.
Hmm het lijkt niet echt te werken met ORDER BY aantal, dan krijg ik namelijk niks te zien.

Doe ik ORDER BY genre, dan zie ik het favoriete genre van het lid met het hoogste id :s

Het werkt dus nog niet bij mij, wie kan me helpen?
Het lukt dus nog niet..

ik doe met php gewoon <? echo "".$list->genre.""; ?> heb ook al list aantal geprobeerd maar ik ben niet zo goed met php, hehe

Reageren