Kullanıcıları & notlarını içeren bir SQL Server tablom var. Basit olması için, sadece 2 sütun olduğunu varsayalım - name
&; grade
. Yani tipik bir satır Ad: "John Doe", Not:"A" şeklinde olacaktır.
Tüm olası yanıtların yüzdelerini bulacak bir SQL deyimi arıyorum. (A, B, C, vb...) Ayrıca, bunu tüm olası yanıtları tanımlamadan yapmanın bir yolu var mı (açık metin alanı - kullanıcılar 'başarılı/başarısız', 'hiçbiri' vb...)
Aradığım nihai çıktı A: %5, B: %15, C: %40, vb.
Notların toplamını hesaplamanız gerekir SQL 2005 ise CTE kullanabilirsiniz
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
Not alanında gruplama yapmanız gerekir. Bu sorgu size hemen hemen her veritabanında aradığınızı verecektir.
Select Grade, CountofGrade / sum(CountofGrade) *100
from
(
Select Grade, Count(*) as CountofGrade
From Grades
Group By Grade) as sub
Group by Grade
Kullandığınız sistemi belirtmelisiniz.
Herhangi bir sql server sürümünde, tüm notların toplamı için bunun gibi bir değişken kullanabilirsiniz:
declare @countOfAll decimal(18, 4)
select @countOfAll = COUNT(*) from Grades
select
Grade, COUNT(*) / @countOfAll * 100
from Grades
group by Grade