Toon posts:

[mysql] sorteren op selectie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende tabel: (landID, soortmedaille,sportID).
LandID is hierbij het id van een land (naam staat in andere tabel, maar doet er niet toe).
sportID is het id van de sport (naam staat ook in andere tabel, doet er ook ff niet toe)
soortmedaille kan zijn:
g = goud
z = zilver
b = brons

Nu wil ik een medaillespiegel gaan maken, die sorteert op het aantal gouden medailles, bij gelijk sorteert op aantal zilver, bij gelijk op aantal brons.

Moet dus per land gezocht worden hoeveel goud, zilver en brons ze hebben en dan nog sorteren.
Hoe kan ik dit doen? Subqueries misschien?

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

zoek eens naar ORDER BY.

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 23-05 11:16

pietje63

RTFM

group by landID helpt je misschien iets verder

zie ook: http://www.w3schools.com/sql/default.asp

[ Voor 37% gewijzigd door pietje63 op 28-07-2004 15:31 ]

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Verwijderd

Topicstarter
eghie schreef op 28 juli 2004 @ 15:26:
zoek eens naar ORDER BY.
Moet je wel even de vraag goed lezen. Er moet namelijk eerst een aantal entry's bij elkaar opgeteld worden gegroepeerd door landID en dan pas sorten.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Ik ken de syntax van mysql niet goed, maar je kunt in deze richting denken:
code:
1
2
3
4
5
6
7
select landid
, sum(iif(soortmedaille,'g',1,0)) goud
, sum(iif(soortmedaille,'z',1,0)) zilver
, sum(iif(soortmedaille,'b',1,0)) brons
from tabel
group by landid
order by goud desc, zilver desc, brons desc

[ Voor 7% gewijzigd door justmental op 28-07-2004 15:36 ]

Who is John Galt?


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:13

Janoz

Moderator Devschuur®

!litemod

De te sorteren kolomen kunnen gewoon kolomen zijn die in de query zijn gegenereerd.
SELECT AVG(cijfer) as gemiddelde, studentnr FROM cijfers GROUP BY studentnr ORDER BY

gemiddelde is gewoon valide SQL. Speel er eens een beetje mee, maar zeg niet bij voorbaat dat dingen niet zomaar kunnen ;)..

In dit geval is het trouwens wel handig waneer je in de manual ff opzoekt of je ook iets van een if kunt doen zodat je

sum( if (type='g',1,0)) as goldmedals

kunt doen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
dat "sum(if [..]" zou echt ideaal zijn, maar volgens mij kan dat niet met mysql, kan ook niks hierover vinden in de manual.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09:13

Janoz

Moderator Devschuur®

!litemod

Moet je toch beter zoeken ;)... Hier bv : http://dev.mysql.com/doc/...ntrol_flow_functions.html

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Verwijderd schreef op 28 juli 2004 @ 15:46:
dat "sum(if [..]" zou echt ideaal zijn, maar volgens mij kan dat niet met mysql, kan ook niks hierover vinden in de manual.
Dan heb je toch niet goed gekeken

edit:
Damn, te traag ;)

[ Voor 9% gewijzigd door Verwijderd op 28-07-2004 15:56 ]


Verwijderd

Topicstarter
Had inderdaad niet goed gezocht blijkbaar, maar had hem inmiddels ook al gevonden.
Dit is het geworden:
code:
1
2
3
4
5
6
select landID, 
sum(if(soort = 'g',1,0)) AS goud, 
sum(if(soort = 'z',1,0)) AS zilver, 
sum(if(soort='b',1,0)) AS brons 
FROM tabel GROUP BY landID 
ORDER BY goud DESC, zilver DESC, brons DESC


Bedankt mensen..!
Pagina: 1