在 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 版本,但可能比以前的效率低一。
选项 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中文网其他相关文章!