select * from grade left join student_info on grade.`学号` = student_info.`学号` ORDER BY student_info.`学号`; 如何按照学号 给两张表分组
时间: 2024-10-09 16:14:12 浏览: 24
在给出的SQL查询中,已经使用了LEFT JOIN操作将grade表和student_info表通过学号(`学号`)关联起来了,并且按学号(`student_info.学号`)进行了排序。如果想要按学号对学生信息进行分组,可以添加`GROUP BY`子句。但是,原始的查询实际上已经在每个学生的每一行上应用了,因为`ORDER BY`仅影响排序顺序,并不会造成分组。
如果你想按照学号对每个学生的成绩和学生信息进行分组,你应该在`SELECT`之后加上`GROUP BY`,同时列出你希望一起分组的所有字段。例如,如果你只想看每个学生的平均成绩,你可能会这么做:
```sql
SELECT student_info.学号, AVG(grade.分数) as 平均成绩, 姓名, 出生日期
FROM grade
LEFT JOIN student_info ON grade.学号 = student_info.学号
GROUP BY student_info.学号, 姓名, 出生日期
ORDER BY student_info.学号;
```
这里我们还取出了学生的姓名和出生日期,这些都是在`GROUP BY`里列出的,以便于看到每个学生的信息。
相关问题
有以下三个表:(共10分,每题5分) student(student_id,student_name,student_age) 分别代表:学号,学生姓名,所属单位,学习年龄 course(course_id,course_name) 分别代表:课程编号,课程名称 stu_cour(student_id,course_id,grade) 分别代表:学号,所选课程编号,学习成绩 请写出相应的sql语句: 1.统计选修了课程的人数(选修多门时,只计算一次) 2.查询选课在3门以上(包括3门)的学生,要求显示学号,姓名,平均分,选课门数,按平均分降序排序 2、给一个不多于 5 位的正整数, 要求: 一、 求它是几位数, 二、 逆序打印出各位数字。
1SELECT COUNT(DISTINCT student_id) FROM stu_cour;
2.SELECT student_id, student_name, AVG(grade) AS avg_grade, COUNT(*) AS course_num FROM student LEFT JOIN stu_cour ON student.student_id=stu_cour.student_id GROUP BY student_id HAVING COUNT(*)>=3 ORDER BY avg_grade DESC;
3.请输入一个不多于5位的正整数:
数据库StudentCourse 有表SC含Sno作学号,Cno作课程号,Grade作成绩。表Student含Sno作学号,Sname作姓名,Ssex作性别,Sbirthday作出生日期,Sdept作所在系,Memo作备注。表Course含Cno作课程号,Cname作姓名,PreCourse作先行课,PreCno作选修课程号,Credit作学分,Semester作开课学期。①查询选修了【数据库原理】的计算机系的学生学号和姓名。②查询每一门课的间接先行课(印先行课的先行课)。③查询学生的学号、姓名,选修课程的名称和成绩。④查询选修了课程的学生姓名。⑤查询所有学生的信息和所选修的课程的课程号。⑥查询已被选修的课程的情况和所有课程的名字。⑦列出学生所有可能的选修情况。⑧查找计算机系的学生选修课程数大于2的学生的姓名、平均成绩和选课门数,并按平均成绩降序排列:
①查询选修了【数据库原理】的计算机系的学生学号和姓名。
```sql
SELECT Student.Sno, Student.Sname
FROM Student, SC, Course
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Course.Cname = '数据库原理' AND Student.Sdept = '计算机系';
```
②查询每一门课的间接先行课(印先行课的先行课)。
```sql
WITH RECURSIVE pre_course(cno, pre_cno) AS (
SELECT Cno, PreCno FROM Course WHERE PreCno IS NOT NULL
UNION ALL
SELECT pre_course.cno, Course.PreCno FROM pre_course JOIN Course ON pre_course.pre_cno = Course.Cno
)
SELECT cno, group_concat(DISTINCT pre_cno) as indirect_pre_courses
FROM pre_course
GROUP BY cno;
```
③查询学生的学号、姓名,选修课程的名称和成绩。
```sql
SELECT Student.Sno, Student.Sname, Course.Cname, SC.Grade
FROM Student, SC, Course
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno;
```
④查询选修了课程的学生姓名。
```sql
SELECT DISTINCT Student.Sname
FROM Student, SC, Course
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Course.Cname = '数据库原理';
```
⑤查询所有学生的信息和所选修的课程的课程号。
```sql
SELECT Student.*, SC.Cno
FROM Student LEFT JOIN SC ON Student.Sno = SC.Sno;
```
⑥查询已被选修的课程的情况和所有课程的名字。
```sql
SELECT Course.*, SC.Sno, SC.Grade
FROM Course LEFT JOIN SC ON Course.Cno = SC.Cno;
```
⑦列出学生所有可能的选修情况。
```sql
SELECT Student.Sno, Student.Sname, Course.Cno, Course.Cname
FROM Student CROSS JOIN Course;
```
⑧查找计算机系的学生选修课程数大于2的学生的姓名、平均成绩和选课门数,并按平均成绩降序排列。
```sql
SELECT Student.Sname, AVG(SC.Grade) AS avg_grade, COUNT(*) as course_count
FROM Student JOIN SC ON Student.Sno = SC.Sno JOIN Course ON SC.Cno = Course.Cno
WHERE Student.Sdept = '计算机系'
GROUP BY Student.Sno
HAVING COUNT(*) > 2
ORDER BY AVG(SC.Grade) DESC;
```
阅读全文