mysql - 使用sql按组计算百分比

标签 mysql sql-server

我有一张表,其中包含学生的 ID、类(class)名称和类(class)级别。

+----+--------+-------+   
| Id | Course | Level |   
+----+--------+-------+   
| 1  | A      | 1     |    
| 2  | A      | 1     |   
| 1  | B      | 1     |   
| 3  | B      | 1     |   
| 4  | C      | 2     |   
+----+--------+-------+  

据此,我想知道每门类(class)按级别涵盖的百分比。

如下表所示:

+-------+--------+----------------+  
| Level | Course | Count_by_level |  
+-------+--------+----------------+  
| 1     | A      | 50%            |  
| 1     | A      | 50%            |     
| 1     | B      | 50%            |   
| 1     | B      | 50%            |   
| 2     | C      | 100%           |   
+-------+--------+----------------+    

我如何使用 SQL 执行此操作?

最佳答案

SQL DEMO

SELECT S.[Id] , S.[Course], S.[Level], T.ctotal,
       100.0 / T.ctotal
FROM students S
JOIN ( SELECT [Course], COUNT(*) as ctotal
       FROM students
       GROUP BY [Course]
      ) T
  ON S.[Course] = T.[Course]

输出

| Id | Course | Level | ctotal |     |
|----|--------|-------|--------|-----|
|  1 |      A |     1 |      2 |  50 |
|  2 |      A |     1 |      2 |  50 |
|  1 |      B |     1 |      2 |  50 |
|  3 |      B |     1 |      2 |  50 |
|  4 |      C |     2 |      1 | 100 |

关于mysql - 使用sql按组计算百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51253506/

相关文章:

mysql - 与括号比较时有什么区别 : WHERE (a, b)=(1,2)

sql - SSIS - 将文件动态移动到具有匹配子字符串名称的文件夹

sql - SQL for XML Path使用节点名称和嵌套的数据值

mysql - 尝试将 mysql 与 jsp 连接时获取 ClassNotFoundException

PHP 时间之前(返回错误时间)

c# - MVC 配置种子方法未插入指定的主键

PHP excel 来自 MySQL 数据库记录

sql - 如何在每 5 分钟运行一次的 SQL Server 代理作业中仅更新一次列

sql - 如何编写一个从表中获取数据的查询,而存储的数据中没有引号和双引号

mysql 从表的最后一个子行获取父行