webForumDet fria alternativet

SQL fråga angående statistisk fördelning

Databaser & SQL

6 svar · 299 visningar · startad av pg

Medlem sedan feb. 200235 inlägg
Frågan#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.

Medlem sedan juni 2004533 inlägg
#2

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

Medlem sedan apr. 20003 174 inlägg
#3

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

mvh Palle
Moderator webForum

Medlem sedan dec. 20003 887 inlägg
#4

Som Guffa sa

SELECT Varde, COUNT(*) AS nRS
FROM Svar
GROUP BY Varde
ORDER BY Varde
Medlem 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

Medlem sedan juni 200032 967 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
Medlem sedan feb. 200235 inlägg
#7

You´re the MAN!

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

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)