/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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];


Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408188
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste