Ho una tabella SQL Server che contiene gli utenti e i loro voti. Per semplicità, diciamo solo che ci sono 2 colonne - nome
& grado
. Quindi una tipica riga sarebbe Name: "John Doe", Grade:"A".
Sto cercando un'istruzione SQL che trovi le percentuali di tutte le possibili risposte. (A, B, C, ecc...) Inoltre, c'è un modo per fare questo senza definire tutte le possibili risposte (campo di testo aperto - gli utenti potrebbero inserire 'pass/fail', 'none', ecc...)
L'output finale che sto cercando è A: 5%, B: 15%, C: 40%, ecc.
Dovete calcolare il totale dei voti Se è SQL 2005 puoi usare 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
Hai bisogno di raggruppare il campo del grado. Questa query dovrebbe darti quello che stai cercando in quasi tutti i database.
Select Grade, CountofGrade / sum(CountofGrade) *100
from
(
Select Grade, Count(*) as CountofGrade
From Grades
Group By Grade) as sub
Group by Grade
Dovresti specificare il sistema che stai usando.
In qualsiasi versione di sql server si potrebbe utilizzare una variabile per il totale di tutti i gradi come questo:
declare @countOfAll decimal(18, 4)
select @countOfAll = COUNT(*) from Grades
select
Grade, COUNT(*) / @countOfAll * 100
from Grades
group by Grade