[sql] 1 tabel meerdere waardes vergelijken

Pagina: 1
Acties:

  • Kevinp
  • Registratie: Juni 2001
  • Laatst online: 27-04 11:20
ik heb in m'n database een tabel. Daarin staat pk wedstrijdnr, teamnr, spelersnr, gewonnen(is sets) en verloren(is sets). tevens is er een tabel met spelers, maar deze is alleen nodig om namen op te vragen(wordt ook in 1 van de 2 scripts gebruikt)

In die tabel kan 1 spelers (met dus spelersnr) vaker voorkomen. En d'r zijn 2 teams.

nu wil ik per team opvragen welke speler(s) de meeste sets hebben gewonnen.

Ik heb al vanalles geprobeerd(voorbeelden komen zo) maar ze wekren niet

Ik heb twee sql scripts die iest deden wat ergens op lijkt maar allebei zijn ze niet goed

1e
code:
1
2
3
4
5
6
7
8
SELECT     SPELERS.NAAM, SPELERS.VOORLETTERS, WEDSTRIJDEN.TEAMNR, SUM(WEDSTRIJDEN.GEWONNEN) AS totaal
FROM         SPELERS INNER JOIN
                      WEDSTRIJDEN ON SPELERS.SPELERSNR = WEDSTRIJDEN.SPELERSNR
GROUP BY WEDSTRIJDEN.TEAMNR, SPELERS.NAAM, SPELERS.VOORLETTERS
HAVING      (SUM(WEDSTRIJDEN.GEWONNEN) in
                          (SELECT      MAX(wedstrijden.gewonnen)
                            FROM        wedstrijden
                            GROUP BY teamnr))

deze geeft iedere speler die de maximale set's heeft gewonnen, maar vergelijkt die niet per team maar vergelijkt allebei de teams met team 2.

en
code:
1
2
3
4
5
SELECT SPELERS.NAAM, SPELERS.VOORLETTERS, WEDSTRIJDEN.TEAMNR, SUM(WEDSTRIJDEN.GEWONNEN) AS totaal
FROM  SPELERS INNER JOIN
               WEDSTRIJDEN ON SPELERS.SPELERSNR = WEDSTRIJDEN.SPELERSNR
GROUP BY SPELERS.NAAM, SPELERS.VOORLETTERS, WEDSTRIJDEN.TEAMNR
HAVING (SUM(WEDSTRIJDEN.GEWONNEN) > MAX(WEDSTRIJDEN.GEWONNEN))

dit script werkt goed zolang niet 2 spelers hetzelfde aantal sets hebben gewonnen. Wat dus wel het geval kan zijn.

ik moet dus simpel iets terug krijgen van

als het script werkt hoef ik eigenlijk alleen maar het teamnr en spelersnr terug te krijgen, daar heb ik voldoende aan. Maar eventueel naam + voorletters(dubbele namen) mag ook als het dat makkelijker maakt

d'r is maar één ding in het leven wat moet, en dat is dood gaan.


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Kun je je tabelstructuur en een kort voorbeeld van de gewenste output eens posten?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Kevinp
  • Registratie: Juni 2001
  • Laatst online: 27-04 11:20
ja de output mag gewoon teamnr, met spelersnr zijn

dit si de voledige tabel structuur

het spelernr in de tabel teams in trouwens het nummer van de aanvoerder, daar stat dus maar 1 nummer in per team.

Afbeeldingslocatie: http://members.home.nl/kevinpluk/tweakers/tabel.jpg

inhoud tabel wedstrijden

Afbeeldingslocatie: http://members.home.nl/kevinpluk/tweakers/inhoud.JPG

[ Voor 18% gewijzigd door Kevinp op 03-10-2005 14:15 ]

d'r is maar één ding in het leven wat moet, en dat is dood gaan.


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
kevinp schreef op maandag 03 oktober 2005 @ 14:08:
het spelernr in de tabel teams in trouwens het nummer van de aanvoerder, daar stat dus maar 1 nummer in per team.
hoezo join je je Spelers tabel dan met de Wedstrijden tabel op dat veld. Dan krijg je tenslotte alles van je aanvoerder terug. Ik zou het denk ongeveer zo doen.

SQL:
1
2
3
4
5
6
7
8
9
select sum( w.gewonnen ) as aantal_gewonnen, s.naam
from spelers s
inner join teams t
on s.spelersnummer = t.spelersnummer
inner join wedstrijden w
on t.teamnummer = w.teamnummer
where teamnummer = ( Hier je teamnummer )
group by s.naam
order by aantal_gewonnen


[edit]
nou ik nog een keer lees wat je wilt zie ik dat je toch iets anders wilt. Maar ik vindt het wel vreemd dat je spelersnummer direct joint op wedstrijd.spelersnummer ( wat dus je captain is )

en waarom heb je in je Team een spelersnummer zitten en niet in je Spelers een Teamnummer? Het lijkt me toch dat een speler bij een team hoort en niet een team bij een speler. Als een speler eventueel lid kan zijn van meerdere teams dan zou je eventueel een koppeltabel kunnen gebruiken

[ Voor 28% gewijzigd door Woy op 03-10-2005 14:24 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Kevinp
  • Registratie: Juni 2001
  • Laatst online: 27-04 11:20
maar zo moet ik per teamnr een query uitvoeren. Dat zou toch in 1x moeten kunnen?

en als je dat where weghaalt dan pakt hij

wel allebei de teams maar heeft speler van team 2, er 9 gewonnen(dat moeten dus 3 spelers zijn die er 3 hebben gewonnen)

[ Voor 52% gewijzigd door Kevinp op 03-10-2005 14:26 ]

d'r is maar één ding in het leven wat moet, en dat is dood gaan.


  • Kevinp
  • Registratie: Juni 2001
  • Laatst online: 27-04 11:20
rwb schreef op maandag 03 oktober 2005 @ 14:18:
[...]

[edit]
nou ik nog een keer lees wat je wilt zie ik dat je toch iets anders wilt. Maar ik vindt het wel vreemd dat je spelersnummer direct joint op wedstrijd.spelersnummer ( wat dus je captain is )

en waarom heb je in je Team een spelersnummer zitten en niet in je Spelers een Teamnummer? Het lijkt me toch dat een speler bij een team hoort en niet een team bij een speler. Als een speler eventueel lid kan zijn van meerdere teams dan zou je eventueel een koppeltabel kunnen gebruiken
een speler is in princype niet lid van een ander team, maar kan daar wel invallen waardoor een speler die lid is van team2 uit kan komen voor team 1. dit staat zo niet in de DB. De tabel teams is een tabel die alleen maar de aanvoerder aangeeft, en moet eigenlijk nog andere naam krijgen. En moet je eigenlijk totaal negeren.

Verder zijn dit 2 hersenspinsels waar nog iets nuttigs uit lijkt te komen. Maar neit helemaal werken.(vooral die 2e werkt bijna)

d'r is maar één ding in het leven wat moet, en dat is dood gaan.


  • Kevinp
  • Registratie: Juni 2001
  • Laatst online: 27-04 11:20
kickje ;)

d'r is maar één ding in het leven wat moet, en dat is dood gaan.

Pagina: 1