🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: nl.comp.programmeren
7 messages
7 total messages Started by flor Fri, 10 Apr 2009 14:54
sql probleem
#32
Author: flor
Date: Fri, 10 Apr 2009 14:54
16 lines
1710 bytes
Ik zit vast met een query.
Ik heb 2 tabellen:

- table personen met velden persoon_id, naam
- table waardes met velden waarde_id, persoon_id, waarde

nu wil ik in 1 enkel query een lijst krijgen met het resultaat van alle 
subjects met hun naam en de waarde van parameter van de hoogste parameter_id

iets in de trend van "SELECT p.naam, w.waarde FROM personen p, waardes w 
WHERE p.persoon_id = w.persoon_id /EN WHERE ENKEL DE HOOGSTE WAARDE VAN 
w.parameter_ID PER PERSOON WORDEN WEERGEGEVEN/".

dat laatste lukt me niet.
ik vermoed dat ik best met een subquery werk, maar ik zit vast
iemand een idee?
Re: sql probleem
#33
Author: dotnet
Date: Fri, 10 Apr 2009 15:03
2 lines
1395 bytes
select top 1 personen.naam, waardes.waarde from personen inner join waardes 
on waardes.persoon_id=personen.persoon_id order by waardes.xxxxxxx desc
Re: sql probleem
#34
Author: Leihcim
Date: Sun, 12 Apr 2009 06:05
23 lines
1990 bytes
flor wrote:
> Ik zit vast met een query.
> Ik heb 2 tabellen:
> 
> - table personen met velden persoon_id, naam
> - table waardes met velden waarde_id, persoon_id, waarde
> 
> nu wil ik in 1 enkel query een lijst krijgen met het resultaat van alle
> subjects met hun naam en de waarde van parameter van de hoogste
> parameter_id
> 
> iets in de trend van "SELECT p.naam, w.waarde FROM personen p, waardes w
> WHERE p.persoon_id = w.persoon_id /EN WHERE ENKEL DE HOOGSTE WAARDE VAN
> w.parameter_ID PER PERSOON WORDEN WEERGEGEVEN/".
> 
> dat laatste lukt me niet.
> ik vermoed dat ik best met een subquery werk, maar ik zit vast
> iemand een idee?

Lichte gok:
SELECT p.naam, max(w.waarde) FROM personen p, waardes w INNER JOIN waardes
on w.persoon_id=p.persoon_id USING p.persoon_id = w.persoon_id group by
p.persoon_id
Re: sql probleem
#35
Author: flor
Date: Mon, 13 Apr 2009 13:33
6 lines
1433 bytes
dotnet wrote:
> select top 1 personen.naam, waardes.waarde from personen inner join waardes 
> on waardes.persoon_id=personen.persoon_id order by waardes.xxxxxxx desc

Bedankt voor de hulp.
Dit geeft echter 1 resultaat, ik heb ��n resultaat per persoon nodig.
Re: sql probleem
#36
Author: flor
Date: Mon, 13 Apr 2009 13:34
27 lines
2282 bytes
Leihcim wrote:
> flor wrote:
>> Ik zit vast met een query.
>> Ik heb 2 tabellen:
>>
>> - table personen met velden persoon_id, naam
>> - table waardes met velden waarde_id, persoon_id, waarde
>>
>> nu wil ik in 1 enkel query een lijst krijgen met het resultaat van alle
>> subjects met hun naam en de waarde van parameter van de hoogste
>> parameter_id
>>
>> iets in de trend van "SELECT p.naam, w.waarde FROM personen p, waardes w
>> WHERE p.persoon_id = w.persoon_id /EN WHERE ENKEL DE HOOGSTE WAARDE VAN
>> w.parameter_ID PER PERSOON WORDEN WEERGEGEVEN/".
>>
>> dat laatste lukt me niet.
>> ik vermoed dat ik best met een subquery werk, maar ik zit vast
>> iemand een idee?
> 
> Lichte gok:
> SELECT p.naam, max(w.waarde) FROM personen p, waardes w INNER JOIN waardes
> on w.persoon_id=p.persoon_id USING p.persoon_id = w.persoon_id group by
> p.persoon_id

de max(w.waarde) geeft een error: de andere velden zijn dan niet "part 
of an aggregate function"
Re: sql probleem
#37
Author: Mathijs
Date: Tue, 14 Apr 2009 08:56
22 lines
1697 bytes
flor schreef:
> Ik zit vast met een query.
> Ik heb 2 tabellen:
> 
> - table personen met velden persoon_id, naam
> - table waardes met velden waarde_id, persoon_id, waarde
> 
> nu wil ik in 1 enkel query een lijst krijgen met het resultaat van alle 
> subjects met hun naam en de waarde van parameter van de hoogste 
> parameter_id
> 

Gokje:

select p.naam, max(w.waarde)
from waardes w, personen p
where w.persoon_id=p.persoon_id
group by p.naam

Groeten,
Mathijs (als je create-statements en wat insert-statements voor test 
data meepost, dan heb je kans dat je vraag beter beantwoord wordt)
Re: sql probleem
#38
Author: Moi
Date: Thu, 16 Apr 2009 17:57
47 lines
2304 bytes
On Tue, 14 Apr 2009 10:56:50 +0200, Mathijs wrote:

> flor schreef:

>> nu wil ik in 1 enkel query een lijst krijgen met het resultaat van alle
>> subjects met hun naam en de waarde van parameter van de hoogste
>> parameter_id
>> 
>> 
> Gokje:
> 
> select p.naam, max(w.waarde)
> from waardes w, personen p
> where w.persoon_id=p.persoon_id
> group by p.naam
> 
> Groeten,
> Mathijs (als je create-statements en wat insert-statements voor test
> data meepost, dan heb je kans dat je vraag beter beantwoord wordt)

Bijna goed.
Dit werkt alleen als p.naam een kandidaatsleutel is.
Waarschijnlijk echter is p.persoons_id de sleutel en is p.naam functioneel 
afhankelijk. (het zou dus kunnen zijn dat er twee verschillende personen 
zijn die 'Jansen' heten)

Een oplossing:
...
GROUP BY p.persoons_id, p.naam

Andere oplossing:

SELECT MIN(p.naam)
, MAX(w.waarde)
FROM waardes w, personen p
WHERE w.persoon_id=p.persoon_id
GROUP by p.persoons_id


[ als persoons_id een PK is, is naam functioneel afhankelijk, en is er dus 
maar een naam mogelijk, gegeven het persoons_id. Dus MAX(naam) == MIN
(naam) ]

[er zijn nog meer oplossingen denkbaar]

HTH,
AvK
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads