ホームページ >データベース >mysql チュートリアル >考えられるすべてのグレードを事前定義せずに、SQL でグレードのパーセンテージを計算するにはどうすればよいですか?
SQL ステートメント内のパーセンテージの計算
質問:
SQL Server テーブルにはユーザーが含まれています名前とその学年。単一の SQL ステートメントで、考えられるすべてのグレード値 (A、B、C など) のパーセンテージを計算するにはどうすればよいでしょうか?さらに、ユーザーが「合格/不合格」または「なし」などの自由回答を入力できることを考慮すると、考えられるすべての成績を明示的に定義せずにこれを達成することは可能ですか?
回答:
オプション 1: 使用するover()
select Grade, count(*) * 100.0 / sum(count(*)) over() from MyTable group by Grade
このソリューションは最も効率的で、over() 関数を利用します。
オプション 2: ユニバーサル (任意の SQL バージョン)
select Grade, count(*) * 100.0 / (select count(*) from MyTable) from MyTable group by Grade;
このオプションはどの SQL バージョンでも機能しますが、以前のオプションよりも効率が低下する可能性があります。 one.
オプション 3: CTE (最も効率的ではない) を使用する
with t(Grade, GradeCount) as ( select Grade, count(*) from MyTable group by Grade ) select Grade, GradeCount * 100.0/(select sum(GradeCount) from t) from t;
この方法は柔軟なソリューションを提供しますが、最も効率的ではありません。
以上が考えられるすべてのグレードを事前定義せずに、SQL でグレードのパーセンテージを計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。