本篇节选自书籍《对比Excel,轻松学习SQL数据分析》一书,主要讲解数据分析面试中常见的30道SQL面试题。
1 查询每个班学生数
现在有一张全校学生信息表stu_table,这张表存储了每位学生的id、name(姓名)、class(班级)、sex(性别)以及一些其他信息,现在我们想知道每个班有多少学生,该怎么实现呢?
stu_table表如下所示:
id | name | class | sex |
---|---|---|---|
4 | 张文华 | 二班 | 男 |
3 | 李思雨 | 一班 | 女 |
1 | 王小凤 | 一班 | 女 |
7 | 李智瑞 | 三班 | 男 |
6 | 徐文杰 | 二班 | 男 |
8 | 徐雨秋 | 三班 | 男 |
5 | 张青云 | 二班 | 女 |
9 | 孙皓然 | 三班 | 男 |
10 | 李春山 | 三班 | 男 |
2 | 刘诗迪 | 一班 | 女 |
自己先想一下代码怎么写,然后再参考我的代码。
select
class
,count(id) as stu_num
from
demo.stu_table
group by
class
解题思路:
我们是要获取每个班的学生数,首先需要对班级进行分组,使用的是group by;然后再对每个组内的学生进行计数聚合运算,使用的count。最后运行结果如下:
class | stu_num |
---|---|
二班 | 3 |
一班 | 3 |
三班 | 4 |
2 查询每个班男女学生数
还是前面的全校学生信息表stu_table,现在我们想知道每个班男生女生分别有多少个?
自己先想一下代码怎么写,然后再参考我的代码。
select
class
,sex
,count(id) as stu_num
from
demo.stu_table
group by
class
,sex
解题思路:
与第一题不同的是,不仅需要每个班级的信息,还需要每个班级里面男女生分别的信息,主要考察的就是按照多列分组聚合的知识,直接在group by后面指明要分组的多列即可,且列与列之间用逗号分隔开。最后运行结果如下:
class | sex | stu_num |
---|---|---|
二班 | 男 | 2 |
一班 | 女 | 3 |
三班 |