Toon posts:

[SQL/Access]Gemiddelde waarde in update-query gebruiken

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

Verwijderd

Topicstarter
Nog steeds druk bezig met een systeem om de scores van een roeiwedstrijd uit te rekenen. Nu is er echter een allerlaatste probleem waar ik op vastloop: het uitrekenen van een gemiddelde en dat gebruiken in een SQL-statement.
Situatie is als volgt:
tbl.deelnemers
deelnemerID (autonumber, integer)
score (double)
roeitijd (double) [In hele secondes]

Om de score uit te rekenen heb ik de volgende formule:
Gemiddelde Roeitijd (over alle deelnemers) * 100 / Roeitijd individuele deelnemer = score

Dit heb ik geprobeerd in een UPDATE statement te formuleren, die geeft echter errors, opp wat voor manier ik het ook probeer, met een tussentabel, tussenquery, het mag niet baten, telkens fouten. Kortom: ik wil SUM(roeitijd) gebruiken voor de verdere berekening, en dat mag op alle manieren, met een tussentabel, een tussenquery etc. etc.
Ik heb helaas geen vergelijkbare problemen op GoT gevonden, dus daar kom ik helaas niet verder mee!

Dank!

  • Boss
  • Registratie: September 1999
  • Laatst online: 20:07

Boss

+1 Overgewaardeerd

En wat lukt er niet aan SUM(roeitijd)? Dat kan je toch in een query zetten (of een subselect) en die verder gebruiken?

't is niet echt een probleem denk ik. Meer een gebrek aan kennis van SQL / formules opstellen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

damiaans: Kun je misschien eens laten zien wat je exact probeert? Ik zie nergens een query die je zelf bedacht hebt, en wat daar dan wel niet fout aan is. Feedback geven gaat veel makkelijker als je ons ook iets geeft waarover we feedback kunnen geven. :)

'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.


  • rickmans
  • Registratie: Juli 2001
  • Niet online

rickmans

twittert

Zoals je kan zien in de documentatie van mysql met betrekking tot het update statement is het niet mogelijk om een GROUP BY toe te voegen voor bijvoorbeeld je AVG function:

PHP:
1
2
3
4
5
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
    SET col_name1=expr1 [, col_name2=expr2 ...]
    [WHERE where_definition]
    [ORDER BY ...]
    [LIMIT row_count]


Hetgeen wat je wel kan doen is een tijdelijk table createn, vervolgens te werk te gaan met INSERT INTO (zie hier) en vervolgens via een join in je update de update plaats te laten vinden.

edit:
mm ik zie nu pas aan de topictitel dat het access is *wakker moet worden*. Hoewel ik niet echt parate kennis heb van het sql(mis)gebruik van access denk ik wel dat het ongeveer hetzelfde zal zitten
.

[ Voor 15% gewijzigd door rickmans op 28-01-2005 06:30 ]

Don't mind Rick


Verwijderd

Topicstarter
De query luidt:
code:
1
2
3
UPDATE tbl.deelnemers
SET score = AVG(Roeitijd)*"100"/Roeitijd
WHERE Roeitijd Is Not Null

Is er misschien een oplossing met een tussentabel maken en zoja hoe kan ik dat dan het beste aanpakken?

  • Boss
  • Registratie: September 1999
  • Laatst online: 20:07

Boss

+1 Overgewaardeerd

code:
1
SET score = AVG(Roeitijd)*"100"/Roeitijd


"100"/roeitijd? Een string delen door een getal? Dat gaat niet werken he.

buiten dat vraag ik me af wat je vraag nu is? Waarvoor wil je een tussentabel maken?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Boss schreef op zaterdag 29 januari 2005 @ 22:31:
code:
1
SET score = AVG(Roeitijd)*"100"/Roeitijd


"100"/roeitijd? Een string delen door een getal? Dat gaat niet werken he.

buiten dat vraag ik me af wat je vraag nu is? Waarvoor wil je een tussentabel maken?
Wat mij betreft gebruik ik geen tussentabel, maar bovenstaande query mag niet (aggregate-functions kunnen niet in een update-query gebruikt worden), en je leest verkeerd:
code:
1
SET score = (AVG(Roeitijd)*"100")/Roeitijd

Oftewel, de gemiddelde roeitijd over alle deelnemers keer 100, gedeeld door de indivuele roetijd. Dus dat kan prima, maar niet in een update-query, maar hoe kan ik dit wel doen?

[ Voor 3% gewijzigd door Verwijderd op 30-01-2005 10:48 ]


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op zaterdag 29 januari 2005 @ 22:00:
De query luidt:
code:
1
2
3
UPDATE tbl.deelnemers
SET score = AVG(Roeitijd)*"100"/Roeitijd
WHERE Roeitijd Is Not Null

Is er misschien een oplossing met een tussentabel maken en zoja hoe kan ik dat dan het beste aanpakken?
Ik weet niet of access het slikt, maar probeer dit eens:
code:
1
2
3
UPDATE tbl.deelnemers
SET score = (select AVG(Roeitijd) from tbl.deelnemers where roeitijd is not null)*100/Roeitijd
WHERE Roeitijd Is Not Null

Who is John Galt?


Verwijderd

Topicstarter
justmental schreef op zondag 30 januari 2005 @ 11:11:
[...]

Ik weet niet of access het slikt, maar probeer dit eens:
code:
1
2
3
UPDATE tbl.deelnemers
SET score = (select AVG(Roeitijd) from tbl.deelnemers where roeitijd is not null)*100/Roeitijd
WHERE Roeitijd Is Not Null
Die werkt uitstekend, ware hjet niet dat ik nu weer de fout krijg 'Operation must be an updateable query'. Ik heb de correcte rechten, dus daar kan het niet aan liggen. Heeft dit misschien iets te maken met een one-to-many - relatie en zoja, hoe kan ik dat omzijlen?

  • Boss
  • Registratie: September 1999
  • Laatst online: 20:07

Boss

+1 Overgewaardeerd

Ik denk dat Access het niet trekt dat de bij te werken rabel (deelnemers) wordt bijgewerkt aan de hand van een berekening op diezelfde tabel...

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Boss schreef op zondag 30 januari 2005 @ 16:01:
Ik denk dat Access het niet trekt dat de bij te werken rabel (deelnemers) wordt bijgewerkt aan de hand van een berekening op diezelfde tabel...
Ik heb helaas geen directe oplossing kunnen vinden via SQL. Daarom heb ik het met VB gedaan, iets langzamer, maar werkt verder prima:
code:
1
2
3
4
5
6
7
UPDATE tbl.deelnemers
SET score = score() * 100 / Roeitijd
WHERE roeitijd > 0;

Public Funtion Score() as Double
Score = DAvg( [Roeitijd], [tbl.deelnemers])
End Function

Iedereen in ieder geval bedankt voor het meedenken!
Pagina: 1