sql - 如何用SQL语句计算百分比

标签 sql sql-server tsql

我有一个包含用户及其等级的 SQL Server 表。为了简单起见,我们假设有两列 - namegrade。因此,典型的行是姓名:“John Doe”,成绩:“A”。

我正在寻找一个 SQL 语句,它可以找到所有可能答案的百分比。 (A、B、C 等...)此外,有没有一种方法可以在不定义所有可能答案的情况下执行此操作(打开文本字段 - 用户可以输入“通过/失败”、“无”等...)

我正在寻找的最终输出是A:5%,B:15%,C:40%,等等...

最佳答案

  1. 最有效(使用 over())。

    select Grade, count(*) * 100.0 / sum(count(*)) over()
    from MyTable
    group by Grade
    
  2. 通用(任何 SQL 版本)。

    select Grade, count(*) * 100.0 / (select count(*) from MyTable)
    from MyTable
    group by Grade;
    
  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 - 如何用SQL语句计算百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770579/

相关文章:

mysql - SQL 内联 IF 语句显示列名和字符串

sql-server - 将 SQL Server 实例重定向到新实例?

sql-server - SQL Server 是否受到 SSD 存储上的碎片索引的影响

sql-server - 如何处理具有 IDENTITY 列的表上的 INSTEAD OF 触发器的 IDENTITY_INSERT?

mysql - SQL查询从另一个表打印两列值

java - 如何从java插入数据库随机唯一整数?

mysql - 如何使用group by或having子句代替内连接MYSQL

c# - 从在线 SQL Server 获取数据时卡住应用程序

sql - 将日期范围与一组日期范围 SQL 进行比较

sql-server - 对多列进行透视 (T-SQL)