私は、ユーザーとその成績を含むSQL Serverテーブルを持っています。わかりやすくするために、name
とgrade
の2つのカラムがあるとします。典型的な行はName: "John Doe", Grade:"A".です。
私は、すべての可能な答えのパーセンテージを求める一つのSQL文を探しています。(A, B, C, etc..) また、すべての可能な回答を定義せずにこれを行う方法はありますか (オープンテキストフィールド - ユーザーは 'pass/fail'、 'none'などを入力できます)。
私が求めている最終的な出力は、A: 5%, B: 15%, C: 40%, etc....
成績の合計を計算する必要があります。 SQL 2005であれば、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
グレードフィールドでグループ化する必要があります。このクエリは、ほとんどのデータベースで探しているものが得られるはずです。
Select Grade, CountofGrade / sum(CountofGrade) *100
from
(
Select Grade, Count(*) as CountofGrade
From Grades
Group By Grade) as sub
Group by Grade
使用しているシステムを指定する必要があります。