webForumDet fria alternativet

SQL fråga angående statistisk fördelning

6 svar · 299 visningar · startad av pg

pgMedlem sedan feb. 200235 inlägg
#1

Hej

Jag har en fråga angående SQL-syntax.

I en tabell så finns det svar på en fråga typ...
Sätt betyg på....bla bla
Svaren ligger som integer-värden på 1-5

Nu vill jag kunna visa svarsfördelningen på följande sätt.
Betyg 1: 76 st
Betyg 2: 11 st
Betyg 3: 109 st
Betyg 4: 22 st
Betyg 5: 45 st

Jag undrar om detta går att få fram med en SQL-fråga och hur den i så fall ska se ut. Som det är nu så får jag köra en fråga för varje värde...
"SELECT COUNT(*) AS nRS FROM Svar WHERE Varde=1"
"SELECT COUNT(*) AS nRS FROM Svar WHERE Varde=2"
osv. Men detta känns inte så smidigt.

Jag har också testat att köra UNION på dessa men kan inte få det att funka...
"SELECT COUNT(*) AS nRS1 FROM Svar WHERE Varde=1
UNION SELECT COUNT(*) AS nRS2 FROM Svar WHERE Varde=2 UNION ....osv." När jag försöker hämta nRS2 med ett recordset så finns inte värdet. Skumt!

Jag sitter och labbar på en MS-server och är tacksam för alla förslag.

GuffaMedlem sedan juni 2004533 inlägg
#2

Gruppera på värdet så får du ut hur många det finns av varje med count(*).

PalleMedlem sedan apr. 20003 174 inlägg
#3

Tråden flyttad från Webbutveckling - Övrigt.

mvh Palle
Moderator webForum

Engine^Medlem sedan dec. 20003 887 inlägg
#4

Som Guffa sa

SELECT Varde, COUNT(*) AS nRS
FROM Svar
GROUP BY Varde
ORDER BY Varde
pgMedlem sedan feb. 200235 inlägg
#5

Hur då?

Hej och tack för svaren.

Men jag förklara mig kanske inte så tydligt för jag vill även kunna få nRS=0 om alternativet saknar svar.

Om det t.ex finns följande i databasen
Betyg 1 - 8 st
Betyg 2 - 3 st
Betyg 3 - 7 st
Betyg 5 - 1 st

Då kommer jag att inte att kunna få fram
Betyg 1 - 8 st
Betyg 2 - 3 st
Betyg 3 - 7 st
Betyg 4 - 0 st <-
Betyg 5 - 1 st

Så egentligen skulle jag vilja kunna skriva villkor inne i count.....
SELECT
COUNT(select * from Svar where Varde=1) AS nRS1
, COUNT(select * from Svar where Varde=2) AS nRS2
, COUNT(select * from Svar where Varde=3) AS nRS3
o.s.v
men detta funkar inte. Så kom gärna med mer förslag tack.
/pg

@ndersMedlem sedan juni 200032 969 inlägg
#6

Ett alternativ:

SELECT COUNT(*) AS nRS1, 
(SELECT COUNT(*) FROM Svar WHERE Varde = 2) AS nRS2,  
(SELECT COUNT(*) FROM Svar WHERE Varde = 3) AS nRS3, 
(SELECT COUNT(*) FROM Svar WHERE Varde = 4) AS nRS4, 
(SELECT COUNT(*) FROM Svar WHERE Varde = 5) AS nRS5 
FROM Svar WHERE Varde = 1
pgMedlem sedan feb. 200235 inlägg
#7

You´re the MAN!

Tackar och bockar. Exakt vad jag behövde. /P

133 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)