Ik heb een SQL Server tabel die gebruikers en hun cijfers bevat. Om het eenvoudig te houden, laten we zeggen dat er 2 kolommen zijn - naam
&; rang
. Dus een typische rij zou zijn: Naam: "John Doe", Rang:"A".
Ik ben op zoek naar een SQL-instructie die de percentages van alle mogelijke antwoorden zal vinden. (A, B, C, enz...) Is er ook een manier om dit te doen zonder alle mogelijke antwoorden te definiëren (open tekstveld - gebruikers kunnen 'pass/fail', 'none', enz...)
De uiteindelijke output die ik zoek is A: 5%, B: 15%, C: 40%, enz...
Je moet het totaal van de rangen berekenen Als het SQL 2005 is, kunt u CTE gebruiken.
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
Je moet groeperen op het rang veld. Deze query zou je moeten geven wat je zoekt in zowat elke database.
Select Grade, CountofGrade / sum(CountofGrade) *100
from
(
Select Grade, Count(*) as CountofGrade
From Grades
Group By Grade) as sub
Group by Grade
Je moet het systeem specificeren dat je gebruikt.
In elke sql server versie zou je een variabele kunnen gebruiken voor het totaal van alle rangen, zoals dit:
declare @countOfAll decimal(18, 4)
select @countOfAll = COUNT(*) from Grades
select
Grade, COUNT(*) / @countOfAll * 100
from Grades
group by Grade