|
| SQL-udtr=E6k: Procenter Fra : AHM |
Dato : 23-03-05 17:39 |
|
Jeg vil herefter gerne finde den procentvise fordeling (afrundet til et
heltal) af svar på et givent spørgsmål. Hvordan gør jeg det?
Jeg har følgende tabel
Selection
ID
UserID
QuestionID
AnswerID
Med følgende SQL-udtræk får jeg stemmefordelingen:
SELECT [AnswerId], Count(*)
FROM Selection
WHERE QuestionID=1
GROUP BY [AnswerID];
AnswerID Count
1 1
3 2
4 1
Er der nogen måde, at få resulttabellen til også, at vise
stemmefordelingen får et svar som ikke har fået stemmer, fx
AnswerID Count
1 1
2 0
3 2
4 1
PS. Der er tale om Access, men vil senere blive flyttet til MS SQL
Server
| |
AHM (24-03-2005)
| Kommentar Fra : AHM |
Dato : 24-03-05 03:36 |
|
In article <MPG.1cabb9e4d0ae0dfc989701@news.inet.tele.dk>,
ingen@spam.tak says...
> Jeg vil herefter gerne finde den procentvise fordeling (afrundet til et
> heltal) af svar på et givent spørgsmål. Hvordan gør jeg det?
Har fundet frem til nedenstående:
SELECT [AnswerId], 100 * Count(*) /
(SELECT COUNT (*) FROM Selection WHERE QuestionID = 1)
FROM Selection
WHERE QuestionID=1
GROUP BY [AnswerID];
Men, hvis stemmefordelingen er således:
QuestionID AnswerID Count
1 1 1
1 2 0
1 3 4
1 4 1
Så bliver resultatet
AnswerID Percent
1 16,666666667
3 66,666666667
4 16,666666667
I tilfælde af afrunding får jeg 17%, 67% og 17%, hvilket i alt giver
101%! Hvordan håndterer man dette, således at totallen bliver 100%?
Derudover har jeg stadigvæk ikke fundet ud af, hvordan jeg får angivet
spørgsmålet som har count = 0 i resultatet, fx
AnswerID Percent
1 16,666666667
2 0
3 66,666666667
4 16,666666667
| |
Kristian Damm Jensen (26-03-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 26-03-05 17:53 |
|
AHM wrote:
> In article <MPG.1cabb9e4d0ae0dfc989701@news.inet.tele.dk>,
> ingen@spam.tak says...
> > Jeg vil herefter gerne finde den procentvise fordeling (afrundet
til et
> > heltal) af svar på et givent spørgsmål. Hvordan gør jeg det?
>
> Har fundet frem til nedenstående:
>
> SELECT [AnswerId], 100 * Count(*) /
> (SELECT COUNT (*) FROM Selection WHERE QuestionID = 1)
> FROM Selection
> WHERE QuestionID=1
> GROUP BY [AnswerID];
>
> Men, hvis stemmefordelingen er således:
>
> QuestionID AnswerID Count
> 1 1 1
> 1 2 0
> 1 3 4
> 1 4 1
>
> Så bliver resultatet
>
> AnswerID Percent
> 1 16,666666667
> 3 66,666666667
> 4 16,666666667
>
> I tilfælde af afrunding får jeg 17%, 67% og 17%, hvilket i alt
giver
> 101%! Hvordan håndterer man dette, således at totallen bliver 100%?
Jeg er villig til at blive belært om det modsatte, men jeg tvivler
stærkt på, at det er muligt at konstruere en generel
afrundingsmetodik, der garanterer dig at summen af de afrundede tal er
identisk med summen af de oprindelige tal.
Som modspørgsmål: Hvad ville du ønske dig i dette eksempel? 17, 66
og 17 giver sum 100, men er det et ønskeligt resultat?
> Derudover har jeg stadigvæk ikke fundet ud af, hvordan jeg får
angivet
> spørgsmålet som har count = 0 i resultatet, fx
>
> AnswerID Percent
> 1 16,666666667
> 2 0
> 3 66,666666667
> 4 16,666666667
Lav en tabel Answer(QuestionID, AnswerID) der indeholder alle mulige
kombinationer af spørgsmål og svar.
Ret derefter din forespørgsel til
SELECT Answer.AnswerId, 100 * Count(*) /
(SELECT COUNT (*) FROM Selection WHERE QuestionID = 1)
FROM Answer left join Selection
on Answer.QuestionID = Selection.QuestionID
and Answer.AnswerId = Selection.AnswerId
WHERE Answer.QuestionID=1
Det burde virke. (Ingen garantier, jeg har end ikke forsøgt at køre
det.)
VH
Kristian
GROUP BY [AnswerID];
| |
|
|