ホームページ >データベース >mysql チュートリアル >考えられるすべてのグレードを事前定義せずに、SQL でグレードのパーセンテージを計算するにはどうすればよいですか?

考えられるすべてのグレードを事前定義せずに、SQL でグレードのパーセンテージを計算するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-17 04:06:10200ブラウズ

How Can I Calculate Grade Percentages in SQL Without Predefining All Possible Grades?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。