Toon posts:

[SQL]Gemiddelde waarde uit andere tabel halen

Pagina: 1
Acties:
  • 245 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zit met het volgende probleem:
Ik heb 2 tabellen: 1 tabel deelnemers, 1 tabel ploegen
Deelnemers:
DeelnemerID (auto_increment)
Naam (Text)
Leeftijd (Single) (leeftijd is genoteerd met 1 decimaal)

Ploegen:
Lid1
Lid2
Lid3
Lid4
Lid5
Lid6
Lid7
Lid8 (allen integer; verwijzen naar DeelnemerID)
lft_gem (single)

Nu wil ik in het veld 'lft_gem' de gemiddelde leeftijd van alle 8 deelnemers berekenen (kunnen er minder zijn, dus wil ik werken met 'Avg(waarden)'). Echter ik kom er niet uit wat voor mij de geschikte SQL-syntax is. Ik heb alles geprobeerd met SELECT & WHERE statement maar telkens krijg ik weer een foutmelding. Mijn kennis van SQL is helaas niet goed genoeg om deze fouten ook te kunnen oplossen. Wie kan mij helpen met de wel werkende SQL-code?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Ten eerste is het in verband met normalisatie overbodig om dat lft_gem veld op te nemen in je ploegen-tabel. Het is immers berekenbare data.

Verder zou je het jezelf makkelijker kunnen maken door nog een tussentabel te nemen waar je alleen de koppeling opslaat tussen een ploeg en een deelnemer, dus waarin je alleen lidnummer en ploegnummer opslaat. Dan blijft de ledentabel hetzelfde en de ploegentabel heeft dan die lidvelden niet meer, met daarvoor in de plaats een ploegnummer.

Vervolgens kun je makkelijker alle records ophalen en daarop dat gemiddelde berekenen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Bedoel je hiermee nu te zeggen dat de tabel 'ploegen' 9 fields heeft, waarvan 8 genaamd lid1 t/m lid8? :X

* curry684 gaat even huilen als het antwoord ja is :) Tevens heb je dan geen kans om avg te kunnen gebruiken zonder mega-queries :)

Professionele website nodig?


Verwijderd

Tabel 1 : Deelnemers
DeelnemerID (auto_increment)
Naam (Text)
Leeftijd (Single) (leeftijd is genoteerd met 1 decimaal)

Tabel 2 : PloegDeelnemers
PloegID (foreign key naar Tabel 3)
DeelnemerID (foreign key naar Tabel 1)

Tabel 3 : Ploegen:
PloegID (auto_increment)
ploegnaam ( varchar 255 bla bla )
lft_gem (single)

Nu nog even een query loslaten op tabel 2 voor de gem leeftijd. lft_gem is een proces gegeven dus zou eigelijk niet in een database moeten staan.

ik pak mijn SQL boek er ff bij :)

[ Voor 11% gewijzigd door Verwijderd op 24-11-2004 22:02 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Uitgaande van de structuur van SandStormer (waarbij ik het veld lft_gem weglaat), de volgende query:
SQL:
1
2
3
4
5
6
7
SELECT Ploegen.ploegnaam, AVG(leeftijd) AS lft_gem
FROM Deelnemers, DeelnemersPloegen, Ploegen
WHERE Deelners.DeelnemerID = DeelnemersPloegen.DeelnemerID
  AND DeelnemersPloegen.PloegID = Ploegen.PloegID
  AND DeelnemersPloegen.PloegID = 1
GROUP BY ploegnaam
ORDER BY lft_gem DESC

Zoiets zou moeten doen wat jij wil.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • MrJay
  • Registratie: Juni 2004
  • Laatst online: 24-10-2024
SELECT dp.ploegid, avg(d.leeftijd) as avgleeftijd
FROM deelnemersploegen dp left join deelnemers d
ON d.deelnemerid = dp.deelnemerid
GROUP BY dp.ploegid
ORDER BY avgleeftijd DESC

(Met de tables van SandStormer)

Heb het niet getest, weet niet zeker of het werkt... moet je eens testen.

Verwijderd

bestaat de funcie avg() wel ?


http://dev.mysql.com/doc/...thematical_functions.html

staat er hiet niet tussen nl.

kun je het niet in 2 keer doen dus eerst alle leeftijden ophalen:

1)SELECT *
FROM Deelnemers, PloegDeelnemers, Ploegen
WHERE Ploegen.PloegID = 1
AND Ploegen.PloegID = PloegDeelnemers.PloegID

2) met php/asp het gemiddelde berekenen.
3) INSERT INTO Ploegen....

[ Voor 52% gewijzigd door Verwijderd op 24-11-2004 22:19 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 07:48

ripexx

bibs

Als je hier kijkt wel ;)

http://dev.mysql.com/doc/mysql/en/GROUP-BY-Functions.html

Het is namelijk een aggregated function :)

buit is binnen sukkel


  • aardbeix15
  • Registratie: Maart 2001
  • Niet online

aardbeix15

100%fruit pers je er niet uit!

AVG is toch wel erg common SQL voor een gemiddelde op een interger veld.

edit, ook voor mysql dus: http://dev.mysql.com/doc/mysql/en/GROUP-BY-Functions.html
edit2: repiexx :(

[ Voor 45% gewijzigd door aardbeix15 op 24-11-2004 22:18 ]

snel zeggen: 'De koetsier poetst de postkoets met postkoetspoets'
levensmotto: 'vroeg gedaan is lang gerelaxed!'.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

MrJay schreef op woensdag 24 november 2004 @ 22:10:
Heb het niet getest, weet niet zeker of het werkt... moet je eens testen.
Das dezelfde query die ik gaf, behalve dan dat die van jou nummers teruggeeft in plaats van groepsnamen? :P
Jawel, kijk maar naar SQLCourse2.com. Overigens lees ik nergens terug dat MySQL gebruikt wordt. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

-NMe- schreef op woensdag 24 november 2004 @ 22:18:
Overigens lees ik nergens terug dat MySQL gebruikt wordt. :P
Bestaan er nog andere dbmsen dan ;)

AVG kwam we wel bekent voor alleen zag ik het opeens nergens meer staan.

[ Voor 18% gewijzigd door Verwijderd op 24-11-2004 22:26 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1