Tengo una tabla de SQL Server que contiene usuarios & sus grados. Para simplificar, digamos que hay 2 columnas - "nombre" y "grado". Así que una fila típica sería Nombre: "John Doe", Grado:"A".
Estoy buscando una sentencia SQL que encuentre los porcentajes de todas las respuestas posibles. (A, B, C, etc...) Además, ¿hay alguna forma de hacer esto sin definir todas las respuestas posibles (campo de texto abierto - los usuarios podrían introducir 'aprobado/reprobado', 'ninguno', etc...)
El resultado final que busco es A: 5%, B: 15%, C: 40%, etc...
Tienes que calcular el total de las calificaciones Si se trata de SQL 2005 puedes utilizar 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
Necesita agrupar en el campo de grado. Esta consulta debería darle lo que busca en casi cualquier base de datos.
Select Grade, CountofGrade / sum(CountofGrade) *100
from
(
Select Grade, Count(*) as CountofGrade
From Grades
Group By Grade) as sub
Group by Grade
Debe especificar el sistema que está utilizando.
En cualquier versión de sql server podrías usar una variable para el total de todas las calificaciones así:
declare @countOfAll decimal(18, 4)
select @countOfAll = COUNT(*) from Grades
select
Grade, COUNT(*) / @countOfAll * 100
from Grades
group by Grade