SQL-入门-6
分组(再进行)查询
GROUP BY 子句
group by 是按字段分类
按照哪个字段分组,产生的后果可能不一样!
order by 是按字段排序
请编写 SQL 语句,查询教师表 teachers,统计不同年龄教师的人数,并将结果按照年龄从大到小排列,返回列名显示为 age_count。
select age, count(age) as age_count from teachers
group by age
order by age desc;
请编写 SQL 语句,查询教师表 teachers 和课程表 courses,统计每个老师教授课程的数量,并将结果按课程数量从大到小排列,如果相同课程数量则按照教师姓名排列,返回列名老师姓名列名显示为 teacher_name ,课程数量列名显示为 course_count。
SELECT t.name as teacher_name,ifnull(count(c.id), 0) as course_count
FROM teachers t
left join courses c
on c.teacher_id=t.id
GROUP BY t.id
ORDER BY course_count desc,teacher_name asc;
HAVING 子句
HAVING 子句就是对分组统计函数进行过滤的子句。
WHERE 子句搜索条件是在分组操作之前,而 HAVING 则是在之后。
现需要结合教师表与课程表,统计不同教师所开课程的学生总数,对于没有任课的老师,学生总数计为 0 ,最后查询学生总数少于 3000 的教师姓名及学生总数 (别名为 student_count ),结果按照学生总数升序排列,如果学生总数相同,则按照教师姓名升序排列。
SELECT
T
.name
ASname
, IFNULL(SUM(C
.student_count
),0) ASstudent_count
FROMcourses
C
RIGHT JOINteachers
T
ONC
.teacher_id
=T
.id
GROUP BYT
.id
HAVINGstudent_count
< 3000
ORDER BYstudent_count
,