| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | 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];
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |