westmanMedlem sedan aug. 2004249 inlägg Jag vill räkna ut medelåldern på studenterna vid varje universitets ort.
Tabellerna:
* student (här finns info om alla studenter)
* gar (info om vad studenterna går på för kurs)
* kurs (info om kurserna)
* inst (info om institutionerna)
Jag tycker något i denna stil borde funka:
SELECT ort, AVG(SELECT 2004 - född AS ålder FROM student) as MedelÅlder
from inst;
men det gör det inte...
Säg till om ni vill veta attributen i tabellerna.
(Access 2003)
LarsGMedlem sedan dec. 200012 464 inlägg Det är relevant att veta hur inst och student är relaterade.
Frågan blir enligt
select ort, avg(2004-född)
from inst join student on inst.id = student.instid
group by ort
där du får byta
on inst.id = student.instid
så att det passar med dina tabeller.
westmanMedlem sedan aug. 2004249 inlägg hmm, nej nu får jag syntax-fel...
(självklart ändrade jag "id" till "nr" osv)
Så här ser tabellerna ut:
student
pnr (nyckel)
född
inst
instnr (nyckel)
ort
kurs
kursnr (nyckel)
instnr (nyckel referens inst)
gar
pnr (nyckel referens student)
kursnr (nyckel referens kurs)
LarsGMedlem sedan dec. 200012 464 inlägg Med den modellen blir frågan mer komplex
select ort, avg(2004-född)
from ((inst inner join kurs on inst.instnr = kurs.instnr)
inner join gar on kurs.kursnr = gar.kursnr)
inner join student on gar.pnr = student.pnr
group by ort
westmanMedlem sedan aug. 2004249 inlägg select ort, avg(2004-född)
from ((inst inner join kurs on inst.instnr = kurs.instnr)
inner join gar on kurs.kursnr = gar.kursnr)
inner join student on gar.pnr = student.pnr
group by ort;
funkar ej... "Ort kan referera till mer än en tabell..."
Jag testade skriva "select inst.ort, avg(..." men det fungerar inte heller.
Btw, är det verkligen så här krångligt, tar vi oss inte hals över huvud nu..?
LarsGMedlem sedan dec. 200012 464 inlägg select inst.ort, avg(2004-född)
from ((inst inner join kurs on inst.instnr = kurs.instnr)
inner join gar on kurs.kursnr = gar.kursnr)
inner join student on gar.pnr = student.pnr
group by inst.ort
westmanMedlem sedan aug. 2004249 inlägg ah, jag glömde ändra till inst.ort i slutet..
tack för din hjälp LarsG!
westmanMedlem sedan aug. 2004249 inlägg för att göra det enkelt så tar jag ytterligare en fråga på denna tråd.
SELECT namn, count(Gar.kursnr) AS samtidigt
FROM Student, Gar
WHERE Student.pnr=Gar.pnr
GROUP BY namn
HAVING count(Gar.kursnr)>2;
Koden ovan tar ut namnen på de som läser minst 2 kurser samtidigt. Hur skall jag göra ifall jag istället vill få ut hur många det är.
LarsGMedlem sedan dec. 200012 464 inlägg SELECT count(*) from (select 1
FROM Student, Gar
WHERE Student.pnr=Gar.pnr
GROUP BY namn
HAVING count(Gar.kursnr)>2
) dt
westmanMedlem sedan aug. 2004249 inlägg tack, d funkar perfekt
måste fråga vad "1" och "dt" står för?
LarsGMedlem sedan dec. 200012 464 inlägg 1 är ett godtyckligt värde eftersom det är enbart antalet poster som är intressant.
dt står för delirium tremens
TravoniMedlem sedan okt. 20041 556 inlägg Vad står "delirium tremens" för då?
http://susning.nu/Delirium_tremens