Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

query alleen geeft juiste resultaat weer, bij group by niet

Pagina: 1
Acties:

  • rmfloris
  • Registratie: Maart 2002
  • Laatst online: 22-11-2024

rmfloris

Kowalski: Kaboeeem??

Topicstarter
Ik heb een query die gegevens haalt uit drie tabellen:
code:
1
2
3
4
5
6
7
SELECT distinct(w.w_id), u.positie, u.atleet_id, e.ev_id
FROM wvo_result_uitslagen u, wvo_result_wedstrijden w, wvo_result_evenement e
WHERE u.w_id = w.id
AND e.ev_id = '33'
AND u.atleet_id = '1463'
AND u.positie < '5' 
ORDER BY u.positie


Deze query geeft als resultaat het volgende:
w_id positie atleet_id ev_id
1351 1 1463 33
1348 1 1463 33
1350 3 1463 33
299 3 1463 33
302 3 1463 33
298 4 1463 33


Dit klopt, nu wil ik alleen de posities bij elkaar voegen en ze optellen. Ik voeg dan een "Count(positie)" toe en een "Group by positie". Als ik dit dan run krijg ik niet de juiste uikomst.
Dit is de nieuwe query met "group by"
code:
1
2
3
4
5
6
7
8
SELECT distinct(u.w_id), u.positie, u.atleet_id, e.ev_id, count(u.positie)
FROM wvo_result_uitslagen u, wvo_result_wedstrijden w, wvo_result_evenement e
WHERE u.w_id = w.id
AND e.ev_id = '33'
AND u.atleet_id = '1463'
AND u.positie < '5' 
group by u.positie
order by u.positie


Het resultaat:
w_id positie atleet_id ev_id count( positie )
1348 1 1463 33 92
299 3 1463 33 138
298 4 1463 33 46


De laatste kolom geeft de totalen weer. Deze zouden moeten zijn
1 -> 2
3 -> 3
4 -> 1
maar zoals uit bovenstaande tabel blijkt is dit niet zo.

Ik maak ergens een fout, maar ik kom er niet achter waar precies. Zou iemand mij hiermee kunnen helpen?

Foto afdrukken prijsvergelijk -> http://www.fotovergelijk.nl


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
je koppelt u aan w, maar e is nergens gekoppeld aan u of w... alles uit e wordt dus een x aantal keer extra meegenomen...

  • rmfloris
  • Registratie: Maart 2002
  • Laatst online: 22-11-2024

rmfloris

Kowalski: Kaboeeem??

Topicstarter
Geweldig, dat is de oplossing. Dat ik daar overheen keek. Hartelijk dank.

Foto afdrukken prijsvergelijk -> http://www.fotovergelijk.nl


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Gebruik daarom ook altijd de ON of USING clause bij joins. Als je dat altijd doet, valt het je meteen op als je het een keer weglaat en een cartesisch product veroorzaakt.

Verder raad ik je aan om het eea te lezen over GROUP BY. Hoewel mysql het default wel toestaat, hoor je geen waarden anders dan aggregate functions of kolommen waarop gegroepeerd is te selecteren.
Zie oa: P&W FAQ - SQL en dan de note over mysql.

Als je bijvoorbeeld de "e.ev_id = '33' " uit je where clause weg zou laten, zal je zien dat je een willekeurig ev_id terugkrijgt. En doorgaans wil je geen willekeurige data van een db. :)

{signature}