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 AS name, IFNULL(SUM(C.student_count),0) AS student_count
FROM courses C RIGHT JOIN teachers T
ON C.teacher_id = T.id
GROUP BY T.id
HAVING student_count < 3000
ORDER BY student_count,

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值