You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何在单条查询中计算每行成绩占总成绩的百分比

问题原因

你原来的写法无法正常运行有两个核心原因:

  1. SQL的执行顺序不允许在SELECT子句中直接引用同层级刚定义的别名total
  2. 未加窗口函数的SUM()聚合会将所有行合并为单一聚合结果,无法保留原表的每一行数据

支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等通用写法)

用窗口函数OVER()实现全表总求和,每一行都会返回全表Grade总和,直接计算占比即可:

SELECT 
    Grade,
    SUM(Grade) OVER () AS total,
    ROUND(Grade * 100.0 / SUM(Grade) OVER (), 2) AS `percent_total`
FROM 你的表名;

说明:

  • 乘100.0是为了避免整数除法丢失小数精度
  • ROUND()的第二个参数可根据你需要保留的百分比小数位数调整
  • 带空格/特殊字符的别名需要用反引号(MySQL)、方括号(SQL Server)等转义

不支持窗口函数的低版本数据库(如MySQL 5.x)

用子查询先查询全表总Grade,再和原表关联计算,同样是单条查询:

SELECT 
    t.Grade,
    s.total,
    ROUND(t.Grade * 100.0 / s.total, 2) AS `percent_total`
FROM 你的表名 t,
(SELECT SUM(Grade) AS total FROM 你的表名) s;

内容的提问来源于stack exchange,提问作者Galaxy S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:21:01