Eu tenho uma tabela do SQL Server que contém usuários & suas notas. Para simplificar's sake, vamos apenas dizer que existem 2 colunas - name
& grade
. Então uma linha típica seria Name: "John Doe", Grade:"A".
I'm procurando por uma instrução SQL que irá encontrar as percentagens de todas as respostas possíveis. (A, B, C, etc...) Há também uma maneira de fazer isso sem definir todas as respostas possíveis (campo de texto aberto - os usuários podem entrar 'pass/fail', 'none', etc...)
A saída final I'm que procura é A: 5%, B: 15%, C: 40%, etc...
Você tem que calcular o total de notas Se for SQL 2005 você pode usar o 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
Você precisa agrupar no campo de notas. Esta consulta deve dar-lhe o que procura em praticamente qualquer base de dados.
Select Grade, CountofGrade / sum(CountofGrade) *100
from
(
Select Grade, Count(*) as CountofGrade
From Grades
Group By Grade) as sub
Group by Grade
Você deve especificar o sistema que você're está usando.
Em qualquer versão de servidor sql você poderia usar uma variável para o total de todas as notas como esta:
declare @countOfAll decimal(18, 4)
select @countOfAll = COUNT(*) from Grades
select
Grade, COUNT(*) / @countOfAll * 100
from Grades
group by Grade