Jeg har en SQL Server-tabell som inneholder brukere og deres karakterer. For enkelhets skyld, la oss bare si at det er to kolonner - "navn" og "karakter". Så en typisk rad vil være Navn: "John Doe", Karakter: "A".
Jeg leter etter en SQL-setning som finner prosentandelen av alle mulige svar. (A, B, C osv...) Finnes det også en måte å gjøre dette på uten å definere alle mulige svar (åpent tekstfelt - brukerne kan skrive inn "bestått/ikke bestått", "ingen" osv...)?
Det endelige resultatet jeg er ute etter er A: 5 %, B: 15 %, C: 40 % osv...
Du må beregne summen av karakterer. Hvis det er SQL 2005, kan du bruke CTE.
WITH Tot(Total) (
SELECT COUNT(*) FROM table
)
SELECT Grade, COUNT(*) / Total * 100
--, CONVERT(VARCHAR, COUNT(*) / Total * 100) + '%' -- With percentage sign
--, CONVERT(VARCHAR, ROUND(COUNT(*) / Total * 100, -2)) + '%' -- With Round
FROM table
GROUP BY Grade
Du må gruppere på karakterfeltet. Denne spørringen skal gi deg det du leter etter i stort sett alle databaser.
Select Grade, CountofGrade / sum(CountofGrade) *100
from
(
Select Grade, Count(*) as CountofGrade
From Grades
Group By Grade) as sub
Group by Grade
Du bør spesifisere hvilket system du bruker.
I en hvilken som helst SQL-serverversjon kan du bruke en variabel for summen av alle karakterer som dette:
declare @countOfAll decimal(18, 4)
select @countOfAll = COUNT(*) from Grades
select
Grade, COUNT(*) / @countOfAll * 100
from Grades
group by Grade