[ACCESS] Select met Group By wil niet lukken

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

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 17:01
Ik probeer uit 1 tabel gegevens te halen middels een ACCESS SQL command. Het principe lijkt heel eenvoudig, maar zelfs met boeken en andere helpsites kom ik er niet aan uit.

SELECT data1,data2,data3 FROM tabel1 GROUP BY data1;

Het ziet er simpel uit. Ik heb al het één en ander geprobeer met o.a. subselects, innerjoins, count() toevoegen, maar niets wilde me een uitkomst bieden.

Ik wil dus gegevens opvragen die NIET bij de GROUP BY staan.

  • ripperke
  • Registratie: Augustus 2003
  • Laatst online: 15-10-2025

ripperke

w00t!

als bij je group by data1 staat moet je "iets doen" met data2 & 3, som, max, min, gemiddelde bv

If TCP/IP handshaking was less formal, perhaps SYN/ACK would be YO/WASSUP


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 17:01
data2, en data3 zijn straat en woonplaats.

Ik hoop dat dat meer forceert waar ik naartoe wil.

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 21:35

Koppensneller

winterrrrrr

Cheater schreef op woensdag 15 februari 2006 @ 09:27:
data2, en data3 zijn straat en woonplaats.

Ik hoop dat dat meer forceert waar ik naartoe wil.
Je wilt dus groupen op data 1, maar wat voor een soort waarde wil je dan voor data 2 & 3? Zoals gezegd moet je een aggregate function op deze velden loslaten (min, max, sum etc.).

Is dat niet de bedoeling dan wil je waarschijnlijk een Distinct voor data 1 zetten ofzo...

[ Voor 3% gewijzigd door Koppensneller op 15-02-2006 09:37 ]


  • hufkes
  • Registratie: Maart 2000
  • Laatst online: 06-04 23:12

hufkes

nee, daar staat niet hufter!

kijk anders even hier voor de syntax van de group by opties. http://office.microsoft.c...tance/HP010322361043.aspx

Maar bedoel je echt wel group by (zie dan tips hierboven), of bedoel je eigen sorteren, oftewel order by?

[ Voor 10% gewijzigd door hufkes op 15-02-2006 09:36 ]

Onderstaande signature is al >20jr oud ***hoe dan***
---
Het internet is een veelbelovend medium
....dat maar heel weinig van zijn beloftes nakomt.
Wat weg is... raak je nooit meer kwijt :P


  • lier
  • Registratie: Januari 2004
  • Laatst online: 15:59

lier

MikroTik nerd

Kan je (een deel van) de inhoud van de tabellen geven ?
Dan wordt het iets eenvoudiger om te begrijpen wat je uiteindelijk wil bereiken...

Eerst het probleem, dan de oplossing


  • whoami
  • Registratie: December 2000
  • Nu online
Als je wilt grouperen op data1, wat moet hij dan tonen voor data2 en data3 ?
Stel, je hebt 2x dezelfde waarde voor data1, en verschillende waardes voor data2 en data3:
code:
1
2
3
data1   data2 data3
1       4        7
1       2        8


Jij wilt dus slechts 1x die '1' weergeven, maar wat moet hij dan voor data2 en data3 tonen in dat record ?

[ Voor 4% gewijzigd door whoami op 15-02-2006 09:48 ]

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Hoe werkt dat GROUP BY nu eigenlijk?

Lees bovenstaande FAQ item maar eens door, daar staat duidelijk in hoe je met GROUP BY kunt werken.

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


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 17:01
P_de_B > tnx, het idee was me echter wel duidelijk hoe de GROUP BY werkt. Maar ik wil dus iets wat niet mogelijk is lijkt wel volgens dat artikel.

Is er geen 'max' te doen op een 'string' veld? Ik heb geen access bij de hand nu, anders had ik het wel geprobeerd. Op die manier krijg ik ergens toch wel wat ik wil...

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 21:35

Koppensneller

winterrrrrr

Cheater schreef op woensdag 15 februari 2006 @ 10:07:
P_de_B > tnx, het idee was me echter wel duidelijk hoe de GROUP BY werkt. Maar ik wil dus iets wat niet mogelijk is lijkt wel volgens dat artikel.

Is er geen 'max' te doen op een 'string' veld? Ik heb geen access bij de hand nu, anders had ik het wel geprobeerd. Op die manier krijg ik ergens toch wel wat ik wil...
DISTINCT <stringveld> ..... ORDER BY <stringveld> DESC

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Wát wil je dan? Gegeven de records die whoami als voorbeeld geeft, wat zou jouw gewenste resultaat dan zijn?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 17:01
whoami schreef op woensdag 15 februari 2006 @ 09:48:
Als je wilt grouperen op data1, wat moet hij dan tonen voor data2 en data3 ?
Stel, je hebt 2x dezelfde waarde voor data1, en verschillende waardes voor data2 en data3:
code:
1
2
3
data1   data2 data3
1       4        7
1       2        8


Jij wilt dus slechts 1x die '1' weergeven, maar wat moet hij dan voor data2 en data3 tonen in dat record ?
Uhh... maakt me niet uit eigenlijk ;-) van mijn part MAX(data2)
en kheb het geprobeerd, en access vind het goed op een string. (teschnisch gezien is dit geen probleem, maar je weet maar nooit waar ACCESS over struikelt.

code:
1
2
3
SELECT MAX(straat), num
FROM table1
GROUP BY num;

Ik heb dus nu zoiets, en dat is eigenlijk goed genoeg. Tnx voor julie reacties.

Verwijderd

Als het niet uitmaakt wat er met de andere velden gebeurd, waarom ze dan uberhaupt opnemen ?
Dan wordt het toch veel makkelijke, gewoon
SQL:
1
Select distinct num from table1

Of zijn er nog voorwaarden die je ons niet hebt verteld, en waardoor het verhaal opeens duidelijk wordt ?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Als het je niet uitmaakt kun je de velden niet opnemen in je SELECT of anders inderdaad bijv. een MAX doen. Dat kan ook op een string.

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


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Ja, waarom selecteer je die velden dan als de waarde niet uitmaakt? :D

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 17:01
Die laatste 3 vragen maken me verbaast eigenlijk.

Ik wil gewoon IETS/MEER weten van die (Bijvoorbeeld) 3 rijen die bijv. 1 veld gemeenschappelijk hebben maar verder niet.

Bijvoorbeeld, je hebt een ledenadministratie. Alle adresgegevens staan erin. Nu wil ik alle personen een brief sturen, maar ik wil niet 2 keer (of vaker) een brief op éénzelfde adres laten versturen. Dus ga ik groeperen op postcode en huisnummer. Maar ik wil niet alleen de adres gegevens, ik wil ook één naam hebben van het adres. En dan kan dat adres wel 3 keer voorkomen, omdat er 3 personen wonen die lid zijn, maar ik wil gewoon maar één persoonsnaam. Maarja ik kan niet groeperen op persoonsnaam, want die zijn WEL verschillend op dat adres. En welke persoon hij dan pakt maakt me niet uit.

Er zijn dus eigenlijk voorbeelden genoeg te bedenken waarom ik dat wil doen.

[ Voor 3% gewijzigd door Cheater op 15-02-2006 11:28 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:48

Janoz

Moderator Devschuur®

!litemod

Als je dat nu eens in je oorspronkelijke post had gezet. Kijkend naar je code kan ik niks anders opmaken dat je uberhaupt iets loopt te proberen met het ophalen van unieke namen ipv de andere twee gegevens.

De vraag blijft echter gewoon staan. Welke naam wil je erbij hebben? De toepassing die jij hier noemt heeft juist helemaal niks met de group by te maken. In principe had P_de_B gewoon gelijk en heb je de daadwerkelijke essentie van group by nog niet helemaal begrepen.

Group by is niet een 'tool' op zich, maar een hulpmiddel bij aggregerende functies.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 17:01
ok ehm...
code:
1
2
3
4
5
6
7
8
----------------------------------------------------------------------------
| id   | naam             | straat      | nummer | woonplaats   | postcode |
============================================================================
|  1   | Piet Vleuten     | Arendhof    | 3      | Elst         | 4246 PE  |
|  2   | Dirk Vleuten     | Arendhof    | 3      | Elst         | 4246 PE  |
|  3   | Jan Draad        | Veenweg     | 8a     | Arnhem       | 4119 DK  |
|  4   | Cluadia Draad    | Veenweg     | 8a     | Arnhem       | 4119 DK  |
----------------------------------------------------------------------------


Nu wil je max 1 persoon (maakt niet uit welke) van elk adres een brief sturen.
code:
1
2
3
SELECT MIN(naam), MIN(straat), MIN(nummer), MIN(woonplaats), MIN(postcode)
FROM table1
GROUP BY postcode, nummer;


So far so good, toch?

Ik weet, dat hij nu PER gegroupeerd rij, een veld pakt uit de 2 rijen, welke de laagste waarde heeft. Dan komt het volgende probleem om de hoek, stel ik wil de kolom 'functie' toevoegen. Functie is voor elk persoon verschillend. Ik kan MIN(functie) erneer zetten, maar de kans bestaat dat de 'functie' niet bij de persoonsnaam hoort. Is dit tegen te gaan? Of moet ik het gewoon echt anders aanpakken? Aangezien sommige twijfelen aan m'n gebruik van GROUP BY.

  • whoami
  • Registratie: December 2000
  • Nu online
Wat jij nodig hebt, is volgens mij een correlated subquery.

https://fgheysels.github.io/


  • WormLord
  • Registratie: September 2003
  • Laatst online: 30-03 16:26

WormLord

Devver

Daarvoor kun je volgens mij beter DISTINCT gebruiken, zoals hiervoor ook al diverse malen is aangegeven.

Of je stuurt iets 'naar de bewoners van', aangezien je toch niet een persoon gaat benaderen, maar een adres.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Als het je toch niet uitmaakt welke rij je pakt is min() onnodig 'duur'. Ipv daarvan gebruik je first() of last() waarmee meteen je tweede probleem is opgelost.
code:
1
2
3
select veld1, veld2, first(veld3), first(veld4), ....,first(veldx)
from tabel
group by veld1, veld2


aggregate functions in MsAccess

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • whoami
  • Registratie: December 2000
  • Nu online
WormLord schreef op woensdag 15 februari 2006 @ 13:10:
Daarvoor kun je volgens mij beter DISTINCT gebruiken, zoals hiervoor ook al diverse malen is aangegeven.

Of je stuurt iets 'naar de bewoners van', aangezien je toch niet een persoon gaat benaderen, maar een adres.
distinct werkt op rij niveau, dus zal hij niet verkrijgen wat hij wil.

https://fgheysels.github.io/

Pagina: 1