sql各种查询班级表和成绩表总结

embedded/2025/1/12 16:04:19/

目录

新建表的数据

查询每个班级成绩总和并排序

如果只想看有成绩的班级,使用INNER JOIN

如果要添加排名

如果要显示具体的排名(不跳号)

RANK() vs DENSE_RANK()

添加及格率统计

统计各分数段人数


新建表的数据

班级表和成绩表

sql">CREATE TABLE class (class_id INT PRIMARY KEY,class_name VARCHAR(50)
);CREATE TABLE score (id INT PRIMARY KEY,class_id INT,student_id INT,score DECIMAL(5,2),FOREIGN KEY (class_id) REFERENCES class(class_id)
);

查询每个班级成绩总和并排序

java">SELECT c.class_id,c.class_name,SUM(s.score) as total_score,COUNT(s.student_id) as student_count,AVG(s.score) as avg_score
FROM class c
LEFT JOIN score s ON c.class_id = s.class_id
GROUP BY c.class_id, c.class_name
ORDER BY total_score DESC;

如果只想看有成绩的班级,使用INNER JOIN

sql">SELECT c.class_id,c.class_name,SUM(s.score) as total_score,COUNT(s.student_id) as student_count,AVG(s.score) as avg_score
FROM class c
INNER JOIN score s ON c.class_id = s.class_id
GROUP BY c.class_id, c.class_name
ORDER BY total_score DESC;

如果要添加排名

sql">SELECT class_info.*,RANK() OVER (ORDER BY total_score DESC) as rank
FROM (SELECT c.class_id,c.class_name,SUM(s.score) as total_score,COUNT(s.student_id) as student_count,AVG(s.score) as avg_scoreFROM class cINNER JOIN score s ON c.class_id = s.class_idGROUP BY c.class_id, c.class_name
) class_info;

如果要显示具体的排名(不跳号)

sql">SELECT class_info.*,DENSE_RANK() OVER (ORDER BY total_score DESC) as rank
FROM (SELECT c.class_id,c.class_name,SUM(s.score) as total_score,COUNT(s.student_id) as student_count,AVG(s.score) as avg_scoreFROM class cINNER JOIN score s ON c.class_id = s.class_idGROUP BY c.class_id, c.class_name
) class_info;

RANK() vs DENSE_RANK()

  • RANK() 会出现跳号(如1,2,2,4)
  • DENSE_RANK() 不会跳号(如1,2,2,3)

添加及格率统计

sql">SELECT class_info.*,ROUND(pass_count * 100.0 / student_count, 2) as pass_rate
FROM (SELECT c.class_id,c.class_name,SUM(s.score) as total_score,COUNT(s.student_id) as student_count,SUM(CASE WHEN s.score >= 60 THEN 1 ELSE 0 END) as pass_countFROM class cINNER JOIN score s ON c.class_id = s.class_idGROUP BY c.class_id, c.class_name
) class_info
ORDER BY total_score DESC;

统计各分数段人数

sql">-- 统计各分数段人数
SELECT c.class_id,c.class_name,SUM(CASE WHEN s.score >= 90 THEN 1 ELSE 0 END) as excellent_count,SUM(CASE WHEN s.score >= 80 AND s.score < 90 THEN 1 ELSE 0 END) as good_count,SUM(CASE WHEN s.score >= 70 AND s.score < 80 THEN 1 ELSE 0 END) as fair_count,SUM(CASE WHEN s.score >= 60 AND s.score < 70 THEN 1 ELSE 0 END) as pass_count,SUM(CASE WHEN s.score < 60 THEN 1 ELSE 0 END) as fail_count
FROM class c
INNER JOIN score s ON c.class_id = s.class_id
GROUP BY c.class_id, c.class_name
ORDER BY c.class_id;


http://www.ppmy.cn/embedded/152871.html

相关文章

CSS——32.字体风格

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>字体风格设置</title></head><body><!--字体风格&#xff1a;设置文字为倾斜效果--><!--font-style: 样式取值;--><!--样式取值:-->&l…

Unity中 Xlua使用整理(一)

1.安装: 从GitHub上下载Xlua源码 Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. (github.com) 下载Xlua压缩包&#xff0c;并解压将Aseet文件夹中的Xlua和Plugins文件夹复制到Unit…

在 Ubuntu 下通过 Docker 部署 Misskey 服务器

引言 Docker&#xff0c;这个现代化的容器化平台&#xff0c;像是一把钥匙&#xff0c;打开了高效开发的门。它允许我们将应用及其所有依赖打包到一个轻量的容器中&#xff0c;确保在任何环境下都能顺利运行。Misskey 是一个强大且灵活的社交网络平台&#xff0c;允许用户创建…

力扣--83.删除排序链表中的重复元素

题目 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 代码 /** Definition for singly-linked list.public class ListNode { int val;ListNode next;ListNode() {}ListNode(int val) { this.val …

红帽认证 VS 华为HCIP哪个有用?

如果你是一名IT人&#xff0c;特别是网络工程师或者运维人&#xff0c;估计都知道“RHCE”和“HCIP”这两个认证吧&#xff01; 那么问题来了&#xff0c;这俩认证到底哪个更有用&#xff1f; 别急&#xff0c;今天就带大家了解了解&#xff01; 随着信息技术的迅速发展&…

使用java springboot 使用 Redis 作为限流工具

使用 Redis 作为限流工具 Redis 还可以用于实现限流功能&#xff0c;例如限制每个 IP 地址的访问次数。你可以使用 Redis 的计数器功能来实现这一点。 实现限流逻辑 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis…

Nginx:HTTP 方法控制

什么是 HTTP 方法控制? HTTP 方法控制 是指在 Nginx 中配置规则,以限制哪些 HTTP 请求方法被允许访问特定资源。HTTP 定义了多种请求方法,每种方法都有其特定用途: GET:用于请求获取指定资源。POST:用于向指定资源提交数据,通常用于提交表单或上传文件。PUT:用于更新指…

ubuntu报错:没有在该文件夹中粘贴文件的权限

1 现象&#xff1a; 近期给ubuntu扩展了硬盘&#xff0c;但是在其中进行文件操作时提示“没有在该文件夹中粘贴文件的权限” 2 原因&#xff1a; 新增硬盘挂载地址为“/home/username/data/” 终端输入 ls -ld /home/username/data/输出 drwxr-xr-x 3 root root 4096 1月…