[Access] Query om alleen hoogste getal weer te geven

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

  • Spike_wolf
  • Registratie: Maart 2003
  • Laatst online: 12:31

Spike_wolf

Genius Or Madman?.. You Decide

Topicstarter
Hey,

Okay, ik heb hier een databaseje gebouwd in MS Access om van leerlingen hun cijfers makkelijk bij te kunnen houden, nu wilde ik er ene query in gooien om te kijken welke leerling het allerhoogste cijfer gehaald heeft (deze moet dus leerling naam, cijfer en vak weergeven).. nu dacht ik dit te kunnen doen door bij cijfer
code:
1
Max([Cijfer Tabel].Cijfer)
mee te geven... maar dit resulteert in een scherm dat doodleuk alle cijfers laat zien :/
niet helemaal de bedoeling dus...

Dit is het complete stukje SQL dat in die query hangt:
code:
1
2
3
SELECT DISTINCTROW [Cijfer Tabel].Voornaam, [Cijfer Tabel].Achternaam, [Cijfer Tabel].Vak, Max([Cijfer Tabel].Cijfer) AS [Max Van Cijfer]
FROM [Cijfer Tabel]
GROUP BY [Cijfer Tabel].Voornaam, [Cijfer Tabel].Achternaam, [Cijfer Tabel].Vak;


Hoe zorg ik ervoor dat hij alleen de hoogste waarde(s) showt??

[edit]
GoT search leverde niet al te veel op
Google search gaf een hoop tutorials over Access maar geen die dit probleem behandeld... (of deze heb k nog nie gevonden :P

[edit2]
als een Modje zin heeft om quiry in de topic titel te veranderen in query _/-\o_ :P

[ Voor 15% gewijzigd door Spike_wolf op 13-04-2005 15:59 ]

Wat doet Ctrl+W ook alweer?
Humankind… be both.
Star Wars Awakens | Instagram


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 14:15

Dido

heforshe

Je krijgt nu waarschijnlijk een lijstje van alle leerling/vak combinaties met het hoogste cijfer dat die leerling voor dat vak behaald heeft. Althans, dat is wat je in je query zet :)

Als je maar een record wilt hebben zul je dus een where clause in moeten bouwen waarin je aangeeft dat je alleen records terug wilt hebben waar de MAX van die group gelijk is aan de MAX van al je cijfers.

Wat betekent mijn avatar?


  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 23-12 16:56

Koppensneller

winterrrrrr

code:
1
2
3
SELECT [alle benodigde velden], max(cijfer) as hoogste
FROM cijfertabel
WHERE cijfer = hoogste

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Je zou ook omgekeerd kunnen sorteren op cijfer, en dan enkel het 1e getal eruit halen :)

Overigens - het is 'query' dus niet zo gek dat je met google nies vond :) Ik pas je topic titel eventjes aan :)

  • Spike_wolf
  • Registratie: Maart 2003
  • Laatst online: 12:31

Spike_wolf

Genius Or Madman?.. You Decide

Topicstarter
elevator schreef op woensdag 13 april 2005 @ 16:00:
Je zou ook omgekeerd kunnen sorteren op cijfer, en dan enkel het 1e getal eruit halen :)

Overigens - het is 'query' dus niet zo gek dat je met google nies vond :) Ik pas je topic titel eventjes aan :)
ja die typo zag ik net ook ja :P thanks for title fix :)

hmmz... ben niet zo heel bedreven met Access (vandaar dat k t ook simel wou houden :P ),
maar zal eens uitzoeken hoe zo'n where clause werkt :) thanks alvast :)

Wat doet Ctrl+W ook alweer?
Humankind… be both.
Star Wars Awakens | Instagram


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 14:15

Dido

heforshe

hugodejong: Dat gaat niet werken. Het enige wat je doet is controleren of de max functie wel werkt, en die werkt prima. Je krijgt echter een record terug voor iedere group van velden die je definieert. (Jij laat voor het gemak alle group by weg, maar dat raad ik je ten zeerste af :)

Wat betekent mijn avatar?


  • Spike_wolf
  • Registratie: Maart 2003
  • Laatst online: 12:31

Spike_wolf

Genius Or Madman?.. You Decide

Topicstarter
okay :P nou ben al iets verder.. dit werkt ook wel, is voor mij alleen iets meer werk :P
k heb nu deze code:
code:
1
2
3
4
SELECT DISTINCTROW [Cijfer Tabel].Voornaam, [Cijfer Tabel].Achternaam, [Cijfer Tabel].Vak, Max([Cijfer Tabel].Cijfer) AS [Max Van Cijfer]
FROM [Cijfer Tabel]
WHERE cijfer=[Max Van Cijfers]
GROUP BY [Cijfer Tabel].Voornaam, [Cijfer Tabel].Achternaam, [Cijfer Tabel].Vak;

Als ik nu de query open, krijg ik een popup box waar ik een cijfer moet invullen, en dan krijg ik iedereen die dat cijfer ooit eens gehaald heeft.. ook wel handig (laat ik er denk ik ook wel in zitten :P ) maar niet echt wat ik zocht, nu moet ik dus steeds gaan proberen of 9,3 er is.. ja.. nou dan 9,4 proberen enz... beetje lastig nog :P
nog suggesties?

Wat doet Ctrl+W ook alweer?
Humankind… be both.
Star Wars Awakens | Instagram


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 14:15

Dido

heforshe

Tipje: Je hoeft *niet* het max(cijfer) te weten voor iedere group die je select.
(Je hebt trouwens nergens een disctinct(row) voor nodig)

Je wilt:
De naam, achternaam, vak, cijfer
uit je tabel
waar het cijfer gelijk is aan het hoogste cijfer in je tabel

(Groeperen hoeft dan ook niet meer.)

De truuk is dat je "het hoogste cijfer uit je tabel" moet formuleren als een select max(cijfer) from tabel ;)

Wat betekent mijn avatar?


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 10:48

Reptile209

- gers -

Spike_wolf schreef op woensdag 13 april 2005 @ 16:10:
okay :P nou ben al iets verder.. dit werkt ook wel, is voor mij alleen iets meer werk :P
k heb nu deze code:
code:
1
2
3
4
SELECT DISTINCTROW ... AS [Max Van Cijfer]
...
WHERE cijfer=[Max Van Cijfers]
...

Als ik nu de query open, krijg ik een popup box waar ik een cijfer moet invullen, en dan krijg ik iedereen die dat cijfer ooit eens gehaald heeft.. ook wel handig (laat ik er denk ik ook wel in zitten :P ) maar niet echt wat ik zocht, nu moet ik dus steeds gaan proberen of 9,3 er is.. ja.. nou dan 9,4 proberen enz... beetje lastig nog :P
nog suggesties?
Als je nu ziet waar de typo zit, weet je ook meteen waar die popup vandaan komt :). Ben niet zo'n SQL-er, maar die vis ik er nog wel uit zo. Vuistregel: als Access een waarde niet kan vinden in je query, vraagt hij er wel naar. Bijna altijd een typvoud. ;)

Zo scherp als een voetbal!


  • Spike_wolf
  • Registratie: Maart 2003
  • Laatst online: 12:31

Spike_wolf

Genius Or Madman?.. You Decide

Topicstarter
ej..
code:
1
2
SELECT Max(cijfer)
FROM [Cijfer Tabel];


Geeft alleen het hoogste cijfer..
Hier dus alleen nog de naam en het vak bij zien te gooien en dan ben ik er :)

Wat doet Ctrl+W ook alweer?
Humankind… be both.
Star Wars Awakens | Instagram


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 14:15

Dido

heforshe

Dat stukje moet je dus inbouwen in je where in je select select van naam, vak en cijfer :)

Wat betekent mijn avatar?


  • Spike_wolf
  • Registratie: Maart 2003
  • Laatst online: 12:31

Spike_wolf

Genius Or Madman?.. You Decide

Topicstarter
Dido schreef op woensdag 13 april 2005 @ 16:35:
Dat stukje moet je dus inbouwen in je where in je select select van naam, vak en cijfer :)
okay... hoe krijg ik dat stuke in m'n WHERE dan? :/ (tja.. n00b.. k weet t :P )
Groupen moet ik dus niet doen, als ik ga groupen krijg ik alle vakken weer terug... als k de naam in m'n Select gooi gaat ie zeuren dat het geen deel uit maakt van een statische expressie..
K zou dus een statische expressie moeten maken waar ie de namen in gebrikt.. lijkt me... of denk ik weer eens verkeerd / te moeilijk ? :/ :P

Wat doet Ctrl+W ook alweer?
Humankind… be both.
Star Wars Awakens | Instagram


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 14:15

Dido

heforshe

Ja, je denkt te moeilijk. :)

Je hoeft in je select geen max te gebruiken, je selecteert gewoon je cijfer, WHERE dat cijfer gelijk is aan het hoogste cijfer in de hele tabel.

Wat betekent mijn avatar?


  • Spike_wolf
  • Registratie: Maart 2003
  • Laatst online: 12:31

Spike_wolf

Genius Or Madman?.. You Decide

Topicstarter
okay.. dahct al dat k weer te moeilijk bezig was :P
Dus ik SELECT [alle benodigde velden]
From [Cijfer Tabel]
Where cijfer=max;

Nou die WHERE cijfer = max levert me weer een pop-up box op.. "Typo" zoals hierboven gezegd? :?
of toch weer een andere fout?

Wat doet Ctrl+W ook alweer?
Humankind… be both.
Star Wars Awakens | Instagram


  • Greenstick
  • Registratie: Juli 2004
  • Laatst online: 07-12-2020

Greenstick

Groen als gras

code:
1
2
3
4
SELECT DISTINCTROW [Cijfer Tabel].Voornaam, [Cijfer Tabel].Achternaam, [Cijfer Tabel].Cijfer, [Cijfer Tabel].Vak
FROM [Cijfer Tabel]
WHERE [Cijfer Tabel].Cijfer = (SELECT MAX([Cijfer Tabel].Cijfer) FROM [Cijfer Tabel])
GROUP BY [Cijfer Tabel].Voornaam, [Cijfer Tabel].Achternaam, [Cijfer Tabel].Vak;


Ik had zou het zo gedaan hebben :/ Of zie ik iets over het hoofd?

edit: de GROUP BY vergeten :)

[ Voor 22% gewijzigd door Greenstick op 13-04-2005 17:02 . Reden: domdom ]

- 01000111 01101111 01010100 -
We love to think about the way things were,
but the time has come and I'm glad it's over


  • Spike_wolf
  • Registratie: Maart 2003
  • Laatst online: 12:31

Spike_wolf

Genius Or Madman?.. You Decide

Topicstarter
Greenstick schreef op woensdag 13 april 2005 @ 16:58:
code:
1
2
3
4
SELECT DISTINCTROW [Cijfer Tabel].Voornaam, [Cijfer Tabel].Achternaam, [Cijfer Tabel].Cijfer
FROM [Cijfer Tabel]
WHERE [Cijfer Tabel].Cijfer = (SELECT MAX([Cijfer Tabel].Cijfer) FROM [Cijfer Tabel])
GROUP BY [Cijfer Tabel].Voornaam, [Cijfer Tabel].Achternaam, [Cijfer Tabel].Vak;


Ik had zou het zo gedaan hebben :/ Of zie ik iets over het hoofd?

edit: de GROUP BY vergeten :)
Tja.. zo werkt het idd ook ja :)
eens kijken of ik verder snap wat er nu precies staat en waarom ie het zo wel doet :)
Wil t graag allemaal leren :)

Thanks voor jullie hulp in ieder geval :>

Wat doet Ctrl+W ook alweer?
Humankind… be both.
Star Wars Awakens | Instagram


Verwijderd

De GROUP BY is niet nodig, omdat je geen aggregatiefunctie in de SELECT-lijst hebt zitten. In de SELECT-lijst van de sub-SELECT is de GROUP BY niet nodig, omdat je geen aggregatie per veld van de tabel, maar van de hele tabel doet.
Pagina: 1