查询选修3门以上课程的学生的学号、总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来。
时间: 2024-02-28 12:58:02 浏览: 132
好的,根据您的需求,可以使用如下的 SQL 语句来实现:
```
SELECT 学号, SUM(CASE WHEN 成绩 >= 60 THEN 成绩 ELSE 0 END) AS 总成绩
FROM 选课表
GROUP BY 学号
HAVING COUNT(*) >= 3
ORDER BY 总成绩 DESC;
```
其中,`选课表` 是包含了学生选课信息的表,包括学号、课程编号、成绩等字段。这里使用了 `SUM` 函数来计算每个学生的总成绩,同时使用了 `CASE WHEN` 语句来过滤掉不及格的课程。`HAVING` 子句用于筛选出选修 3 门及以上课程的学生,最后使用 `ORDER BY` 子句按照总成绩的降序排列输出结果。
相关问题
1. 查询全体学生的学号和姓名 2. 查询全体学生的详细记录 3. 查询所有选修过课程的学生学号 4. 查询考试有不及格的学生学号 5. 查询考试有不及格的学生学号 查询不是信息系(IS)、计算机系(CS)的学生性别、年龄、系别 6. 查询选修了四号课的学生学号和成绩,结果按成绩降序排列 7. 查询每个课程号和相应的选课人数 8. 查询计算机系的学生姓名,年龄,系别 9. 查询年龄18-20岁的学生学号,姓名,年龄,系别 10. 查询姓刘的学生情况 11. 查询既选修1号课程,又选修2号课程的学生学号 12. 查询学生的姓名和出生年份 13. 查询没有成绩的学生的学号和课程号 14. 查询总成绩大于200分的学生学号 15. 查询每门课程不及格学生人数 16. 查询不及格课程超过三门的学生学号 17. 查询年龄在10到19岁之间的学生信息 18. 查询全体学生情况,按所在系升序排列 19. 查询选了1号课程的学生平均成绩 20. 查询选了3号课程的学生最高分 21. 查询每个同学的总成绩 用MySQL实现
很抱歉,我是一个语言模型AI,无法直接访问数据库。但我可以告诉你一些SQL语句,供你参考:
1. 查询全体学生的学号和姓名
SELECT 学号, 姓名 FROM 学生表;
2. 查询全体学生的详细记录
SELECT * FROM 学生表;
3. 查询所有选修过课程的学生学号
SELECT DISTINCT 学号 FROM 选课表;
4. 查询考试有不及格的学生学号
SELECT DISTINCT 学号 FROM 成绩表 WHERE 成绩 < 60;
5. 查询不是信息系(IS)、计算机系(CS)的学生性别、年龄、系别
SELECT 性别, 年龄, 系别 FROM 学生表 WHERE 系别 NOT IN ('IS', 'CS');
6. 查询选修了四号课的学生学号和成绩,结果按成绩降序排列
SELECT 学号, 成绩 FROM 成绩表 WHERE 课程号 = '4' ORDER BY 成绩 DESC;
7. 查询每个课程号和相应的选课人数
SELECT 课程号, COUNT(*) AS 选课人数 FROM 选课表 GROUP BY 课程号;
8. 查询计算机系的学生姓名,年龄,系别
SELECT 姓名, 年龄, 系别 FROM 学生表 WHERE 系别 = 'CS';
9. 查询年龄18-20岁的学生学号,姓名,年龄,系别
SELECT 学号, 姓名, 年龄, 系别 FROM 学生表 WHERE 年龄 BETWEEN 18 AND 20;
10. 查询姓刘的学生情况
SELECT * FROM 学生表 WHERE 姓名 LIKE '刘%';
11. 查询既选修1号课程,又选修2号课程的学生学号
SELECT 学号 FROM 选课表 WHERE 课程号 IN ('1', '2') GROUP BY 学号 HAVING COUNT(DISTINCT 课程号) = 2;
12. 查询学生的姓名和出生年份
SELECT 姓名, YEAR(出生日期) AS 出生年份 FROM 学生表;
13. 查询没有成绩的学生的学号和课程号
SELECT 学号, 课程号 FROM 选课表 WHERE NOT EXISTS (SELECT * FROM 成绩表 WHERE 选课表.学号 = 成绩表.学号 AND 选课表.课程号 = 成绩表.课程号);
14. 查询总成绩大于200分的学生学号
SELECT 学号 FROM 成绩表 GROUP BY 学号 HAVING SUM(成绩) > 200;
15. 查询每门课程不及格学生人数
SELECT 课程号, COUNT(*) AS 不及格人数 FROM 成绩表 WHERE 成绩 < 60 GROUP BY 课程号;
16. 查询不及格课程超过三门的学生学号
SELECT 学号 FROM 成绩表 WHERE 成绩 < 60 GROUP BY 学号 HAVING COUNT(*) > 3;
17. 查询年龄在10到19岁之间的学生信息
SELECT * FROM 学生表 WHERE 年龄 BETWEEN 10 AND 19;
18. 查询全体学生情况,按所在系升序排列
SELECT * FROM 学生表 ORDER BY 系别 ASC;
19. 查询选了1号课程的学生平均成绩
SELECT AVG(成绩) AS 平均成绩 FROM 成绩表 WHERE 课程号 = '1';
20. 查询选了3号课程的学生最高分
SELECT MAX(成绩) AS 最高分 FROM 成绩表 WHERE 课程号 = '3';
21. 查询每个同学的总成绩
SELECT 学号, SUM(成绩) AS 总成绩 FROM 成绩表 GROUP BY 学号;
(1)KC(课程表)(课程号 c_ID,课程名 c_Name,学分 c_Credit) (2)XS(学生表)(学号 s_ID,姓名 s_Name,所在系s_department,宿舍电话s_telephone) (3)XS_KC(学生选课表)(学号 s_ID,课程号 c_ID,成绩 score) 在 chaxun 数据库中进行如下查询,将代码保存在. sql 文件中。 (1) 在 KC 表中查询学分低于3分的课程信息,并按课程号升序排列。 (2) 在 XS _ KC 表中按学号分组汇总学生的平均分,并按平均分的降序排列。 (3) 在 XS _ KC 表中查询至少选修了2门课程的学生学号和姓名。 (4)查询成绩不及格的学生的基本信息。 (5)分别用子查询和连接查询,查询101号课程不及格的学生信息。 (6)在 XS 表中查询住在同一宿舍的学生信息,即其所住宿舍电话相同。 (7)查询 XS 表中所有的系名。 (8)查询有多少名同学选修了课程。 9)查询与杨颖同在一个系的同学姓名。 (10)查询选修课程的学生姓名、课程名和成绩。 (11)修改经管系电话号码为3615555。 (12)统计每门课程的选课人数和最高分。 (13)统计每个学生的选课门数和考试总成绩,并按选课门数的降序排列。 (14)查询有多少名同学没有选课。
以下是您提出的查询问题的 SQL 语句:
1. 在 KC 表中查询学分低于3分的课程信息,并按课程号升序排列。
```
SELECT c_ID, c_Name, c_Credit
FROM KC
WHERE c_Credit < 3
ORDER BY c_ID ASC;
```
2. 在 XS_KC 表中按学号分组汇总学生的平均分,并按平均分的降序排列。
```
SELECT s_ID, AVG(score) AS avg_score
FROM XS_KC
GROUP BY s_ID
ORDER BY avg_score DESC;
```
3. 在 XS_KC 表中查询至少选修了2门课程的学生学号和姓名。
```
SELECT XS.s_ID, XS.s_Name
FROM XS
INNER JOIN (
SELECT s_ID
FROM XS_KC
GROUP BY s_ID
HAVING COUNT(DISTINCT c_ID) >= 2
) AS T
ON XS.s_ID = T.s_ID;
```
4. 查询成绩不及格的学生的基本信息。
```
SELECT XS.s_ID, XS.s_Name, XS.s_department, XS.s_telephone
FROM XS
INNER JOIN XS_KC
ON XS.s_ID = XS_KC.s_ID
WHERE XS_KC.score < 60;
```
5. 分别用子查询和连接查询,查询101号课程不及格的学生信息。
使用子查询:
```
SELECT s_ID, s_Name
FROM XS
WHERE s_ID IN (
SELECT s_ID
FROM XS_KC
WHERE c_ID = '101' AND score < 60
);
```
使用连接查询:
```
SELECT XS.s_ID, XS.s_Name
FROM XS
INNER JOIN XS_KC
ON XS.s_ID = XS_KC.s_ID AND XS_KC.c_ID = '101' AND XS_KC.score < 60;
```
6. 在 XS 表中查询住在同一宿舍的学生信息,即其所住宿舍电话相同。
```
SELECT T1.s_ID, T1.s_Name, T1.s_department, T1.s_telephone, T2.s_ID, T2.s_Name, T2.s_department, T2.s_telephone
FROM XS AS T1
INNER JOIN XS AS T2
ON T1.s_telephone = T2.s_telephone AND T1.s_ID < T2.s_ID;
```
7. 查询 XS 表中所有的系名。
```
SELECT DISTINCT s_department
FROM XS;
```
8. 查询有多少名同学选修了课程。
```
SELECT COUNT(DISTINCT s_ID) AS num_students
FROM XS_KC;
```
9. 查询与杨颖同在一个系的同学姓名。
```
SELECT DISTINCT s_Name
FROM XS
WHERE s_department = (
SELECT s_department
FROM XS
WHERE s_Name = '杨颖'
);
```
10. 查询选修课程的学生姓名、课程名和成绩。
```
SELECT XS.s_Name, KC.c_Name, XS_KC.score
FROM XS_KC
INNER JOIN XS
ON XS_KC.s_ID = XS.s_ID
INNER JOIN KC
ON XS_KC.c_ID = KC.c_ID;
```
11. 修改经管系电话号码为3615555。
```
UPDATE XS
SET s_telephone = '3615555'
WHERE s_department = '经管系';
```
12. 统计每门课程的选课人数和最高分。
```
SELECT c_ID, COUNT(DISTINCT s_ID) AS num_students, MAX(score) AS max_score
FROM XS_KC
GROUP BY c_ID;
```
13. 统计每个学生的选课门数和考试总成绩,并按选课门数的降序排列。
```
SELECT s_ID, s_Name, COUNT(c_ID) AS num_courses, SUM(score) AS total_score
FROM XS_KC
INNER JOIN XS
ON XS_KC.s_ID = XS.s_ID
GROUP BY s_ID
ORDER BY num_courses DESC;
```
14. 查询有多少名同学没有选课。
```
SELECT COUNT(*) AS num_students
FROM XS
WHERE s_ID NOT IN (
SELECT DISTINCT s_ID
FROM XS_KC
);
```
阅读全文