(一)学生表(学生id,姓名,性别,分数)student (s_id,name,sex,score);班级表(班级id,班级名称) class (c id,c name) ; 学生班级表(班级id,学生id) student class(s id,c_id); [以下两小题任选一题即可] 1)查询一班得分在80分以上的学生; 2)查询所有班级的名称,和所有班中女生人数和女生的平均分
时间: 2024-03-12 14:50:09 浏览: 26
1) 查询一班得分在80分以上的学生:
```
SELECT s.name, s.score
FROM student s
INNER JOIN student_class sc ON s.s_id = sc.s_id
WHERE sc.c_id = 1 AND s.score >= 80;
```
其中,`1` 表示班级的 id,可以根据实际情况修改。
2) 查询所有班级的名称,和所有班中女生人数和女生的平均分:
```
SELECT c.c_name, COUNT(CASE WHEN s.sex = '女' THEN 1 END) AS female_count, AVG(CASE WHEN s.sex = '女' THEN s.score END) AS female_avg
FROM class c
LEFT JOIN student_class sc ON c.c_id = sc.c_id
LEFT JOIN student s ON sc.s_id = s.s_id
GROUP BY c.c_id;
```
该查询使用了左连接(`LEFT JOIN`)来保证查询出所有班级的信息,即使该班级没有学生。同时,使用了 `COUNT` 和 `AVG` 聚合函数来统计女生人数和女生平均分。
相关问题
功能测试笔试题 姓名: 日期: 预计完成时间15分钟 学生表 (学生id,姓名,性别,分数) student (s_id,name, sex,score)班级表 (班级id,班级名称) class(cid,cname)学生班级表(班级id,学生id) student_class (sid,cid) 1.查询男、女生人数以及各自的平均分 2.查询班级名称是“一班”并且得分等于 60,61,62的学生 3.将得分小于60分的分数改成60分
1. 查询男、女生人数以及各自的平均分:
SELECT sex, COUNT(*) AS count, AVG(score) AS avg_score FROM student GROUP BY sex;
2. 查询班级名称是“一班”并且得分等于 60,61,62的学生:
SELECT s_id, name, sex, score FROM student JOIN student_class ON student.s_id = student_class.sid JOIN class ON student_class.cid = class.cid WHERE class.cname = '一班' AND score IN (60, 61, 62);
3. 将得分小于60分的分数改成60分:
UPDATE student SET score = 60 WHERE score < 60;
有学生表student(id, name,sex,score)请用一个sql查询男女成绩各前三名的学生姓名
可以使用以下 SQL 语句查询男女成绩前三名的学生姓名:
```
SELECT sex, name, score
FROM (
SELECT
sex, name, score,
ROW_NUMBER() OVER (PARTITION BY sex ORDER BY score DESC) AS rank
FROM student
) AS temp
WHERE rank <= 3
ORDER BY sex, rank
```
该 SQL 语句会首先根据性别和成绩进行分组和排序,然后使用 ROW_NUMBER() 函数生成每个分组内的排名,最后筛选出排名前三的学生并按照性别和排名顺序进行排序。