[PostgreSQL] Unieke waarde in 1 kolom groeperen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Don3k
  • Registratie: Februari 2001
  • Laatst online: 06-09 06:49
Ik heb 1 tabel. Deze bezit een wegnummer en de coördinaten van het startpunt. Nu heb ik verschillende records. Deze hebben dezelfde wegnummers alleen verschillende coördinaten. Zou graag van elke wegnummer 1 coördinaat willen uitlezen.

Met dit krijg ik van elk wegnummer 1 coördinaat terug, maar die coördinaat is over hetzelfde, wat niet klopt. De startpunt velden zijn geometrisch.

code:
1
2
3
SELECT wegnummer, (SELECT weg.startpunt from weg LIMIT 1)
FROM weg
GROUP BY wegnummer


Dit ook geprobeerd, maar dan krijg ik alle unieke records terug. Omdat coördinaten uniek zijn, krijg ik weer alles terug:

code:
1
2
3
SELECT wegnummer, (SELECT weg.startpoint)
FROM weg
GROUP BY wegnummer, weg.startpunt


Is er met PostgreSQL om alle multistring coördinaten te joinen tot een grote multistring coördinaat.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23-09 23:37

Janoz

Moderator Devschuur®

!litemod

Het is niet vreemd dat er geen koppeling tussen wegnummer en startpoint ziet want je hebt op geen enkele manier een koppeling aangebracht tussen je select en je subselect. De subselect moet je niet bij de kolom opsomming neerzetten, maar in het where gedeelte dat je zo meteen aan je query toe gaat voegen ;).

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


Acties:
  • 0 Henk 'm!

  • Don3k
  • Registratie: Februari 2001
  • Laatst online: 06-09 06:49
code:
1
2
3
4
5
SELECT wegnummer 
FROM road
WHERE wegnummer IN
(SELECT weg.startpunt from weg LIMIT 1)
GROUP BY wegnummer


=.= Doesn't work for me =( Ik doe wat fout :( Krijg lege velden terug.

[ Voor 6% gewijzigd door Don3k op 07-12-2007 11:02 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Don3k schreef op vrijdag 07 december 2007 @ 10:39:
Met dit krijg ik van elk wegnummer 1 coördinaat terug, maar die coördinaat is over hetzelfde, wat niet klopt. De startpunt velden zijn geometrisch.
Nee, je krijgt met deze queries voor elk wegnummer een startpunt terug, maar dan wel van de weg die toevallig in je subquery als eerste terugkomt. Wat je mist is een koppeling tussen je weg en je road (mooie naamgeving trouwens...) in die subquery.

Met zoiets gaat het vast beter:
code:
1
2
3
SELECT wegnummer, (SELECT weg.startpunt from weg WHERE weg.wegnummer = road.wegnummer LIMIT 1)
FROM road
GROUP BY wegnummer

Acties:
  • 0 Henk 'm!

  • Don3k
  • Registratie: Februari 2001
  • Laatst online: 06-09 06:49
ACM schreef op vrijdag 07 december 2007 @ 11:07:
[...]

Nee, je krijgt met deze queries voor elk wegnummer een startpunt terug, maar dan wel van de weg die toevallig in je subquery als eerste terugkomt. Wat je mist is een koppeling tussen je weg en je road (mooie naamgeving trouwens...) in die subquery.

Met zoiets gaat het vast beter:
code:
1
2
3
SELECT wegnummer, (SELECT weg.startpunt from weg WHERE weg.wegnummer = road.wegnummer LIMIT 1)
FROM road
GROUP BY wegnummer
hmm... geeft hetzelfde result terug. Startpunt blijft overal hetzelfde. Wel heb ik net een fout gemaakt in mijn topic. Weg is de databasenaam, vandaar verwarrende namen. Net vertaald in een iets makkelijker te begrijpen taal.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Don3k schreef op vrijdag 07 december 2007 @ 11:13:
hmm... geeft hetzelfde result terug. Startpunt blijft overal hetzelfde. Wel heb ik net een fout gemaakt in mijn topic. Weg is de databasenaam, vandaar verwarrende namen. Net vertaald in een iets makkelijker te begrijpen taal.
Als je het verschil tussen je eerste en mijn query bekijkt mag ik toch hopen dat je hem zelf zo kan maken dat ie de goede relatie tussen de velden van de subselect en de rest van je select legt?

Acties:
  • 0 Henk 'm!

  • Don3k
  • Registratie: Februari 2001
  • Laatst online: 06-09 06:49
ACM schreef op vrijdag 07 december 2007 @ 11:32:
[...]

Als je het verschil tussen je eerste en mijn query bekijkt mag ik toch hopen dat je hem zelf zo kan maken dat ie de goede relatie tussen de velden van de subselect en de rest van je select legt?
Ja, in mijn situatie is dit

code:
1
2
3
SELECT wegnummer, (SELECT weg.startpunt from weg WHERE weg.wegnummer = weg.wegnummer LIMIT 1)
FROM weg
GROUP BY wegnummer


weg.wegnummer = weg.wegnummer klinkt niet zo goed denk ik. Het is alleen maar 1 tabel.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Don3k schreef op vrijdag 07 december 2007 @ 11:44:
weg.wegnummer = weg.wegnummer klinkt niet zo goed denk ik. Het is alleen maar 1 tabel.
Daar zijn aliasen voor...

code:
1
2
3
SELECT wegnummer, (SELECT wegi.startpunt FROM weg AS wegi WHERE wegi.wegnummer = wego.wegnummer LIMIT 1)
FROM weg AS wego
GROUP BY wegnummer

Acties:
  • 0 Henk 'm!

  • Don3k
  • Registratie: Februari 2001
  • Laatst online: 06-09 06:49
wazig, het werkt nu wel =s
maar ben niet tevreden mee, toch maar zoeken hoe ik het centrale punt van een multilinestring kan rekenen.
Pagina: 1