SQL: medelvärdet två ggr ur samma fält
Är det någon som har en ide hur man plockar fram medelvärdet ur samma fält två gånger där det råder olika villkor för vad man vill visa i de olika fälten.
En felaktig lösning för att sprida ljus över min förvirring.
SELECT AVG(Inkomst) Män, AVG(Inkomst) Kvinnor
FROM Personal
WHERE Kon = ‘M’
AND Kon = ‘K’;
Svara
Sv: SQL: medelvärdet två ggr ur samma fält
Du har tänkt hyffsat rätt, dock är din wheresats fel. Så här tolkar dbservern din sql:
SELECT AVG(Inkomst) Män, AVG(Inkomst) Kvinnor
FROM Personal
WHERE Kon = ‘M’
AND Kon = ‘K’;
HÄMTA medelvärdet av inkomst som män, hämta medelvärdet av inkomst som kvinnor
FRÅN Personal
DÄR Kon = 'M'
OCH Kon = 'K'
Du lär få rätt få träffar eftersom det finns få androgyna (tvåkönade) människor i denna värld. =)
Du kan använda dig av en join för att få fram förväntat resultat.
SELECT AVG(m.Inkomst) Män, AVG(k.Inkomst) Kvinnor
FROM Personal m, Personal k
WHERE m.Kon = ‘M’
AND k.Kon = ‘K’;
ett annat sätt att skriva det (gör exakt samma sak)
SELECT AVG(m.Inkomst) Män, AVG(k.Inkomst) Kvinnor
FROM Personal m
JOIN Personal k
WHERE m.Kon = ‘M’
AND k.Kon = ‘K’;
Om man anger endast join betyder det en Inner Join, dvs data måste finnas i båda tabellerna för att raden ska hämtas.
Svara
Sv: SQL: medelvärdet två ggr ur samma fält
Om det är Access kan du skriva:
SELECT -AVG(Inkomst*(Kon = 'M')) Män, -AVG(Inkomst*(Kon = 'K')) Kvinnor
FROM Personal
Redigerad (2002-09-24 15:14:10):
Det fungera tyvärr inte med AVG, Var SUM jag tänkte på.
Svara
Sv: SQL: medelvärdet två ggr ur samma fält
Andreas:
Kommer inte din SQL-sats räkna "de felaktiga" posterna som 0, så att att de drar ner medevärdet??? (nu har jag iofs inte testat...)
/Johan
Svara
Sv: SQL: medelvärdet två ggr ur samma fält
Du har rätt Johan.<br>
Det tänkte jag inte på. Har för vana att använda den med sum. Där antalet inte spelar någon roll.<br>
<br>
Mittandra förslag är att istället gruppera:<br>
<br>
SELECT Kon, AVG(Inkomst) AS Inkomst<br>
FROM Personal<br>
GROUP BY Kon;<br>
<br>
Tror det är en av det bättre frågerna för att beräkna värdena. Får hantera värdena som rader istället för kolumner:
<code>
Dim Män
Dim Kvinnor
Do Until RS.EOF
Select Case RS("Kon")
Case "K"
Kvinnor = RS("Inkomst")
Case "M"
Män = RS("Inkomst")
End Select
RS.MoveNext
Loop
</code>
Borde ge max två loopar om det inte är så att det finns mer värden än K och M.
Svara