- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
Student
+--------------+---------+ | Column Name | Type | +--------------+---------+ | student_id | int | | student_name | varchar | | gender | varchar | | dept_id | int | +--------------+---------+ student_id 是该表的主键(具有唯一值的列)。 dept_id是Department表中dept_id的外键。 该表的每一行都表示学生的姓名、性别和所属系的id。表:
Department
+-------------+---------+ | Column Name | Type | +-------------+---------+ | dept_id | int | | dept_name | varchar | +-------------+---------+ dept_id是该表的主键(具有唯一值的列)。 该表的每一行包含一个部门的id和名称。编写解决方案,为
Department
表中的所有部门(甚至是没有当前学生的部门)报告各自的部门名称和每个部门的学生人数。按
student_number
降序 返回结果表。如果是平局,则按dept_name
的 字母顺序 排序。结果格式如下所示。
示例 1:
输入: Student 表: +------------+--------------+--------+---------+ | student_id | student_name | gender | dept_id | +------------+--------------+--------+---------+ | 1 | Jack | M | 1 | | 2 | Jane | F | 1 | | 3 | Mark | M | 2 | +------------+--------------+--------+---------+ Department 表: +---------+-------------+ | dept_id | dept_name | +---------+-------------+ | 1 | Engineering | | 2 | Science | | 3 | Law | +---------+-------------+ 输出: +-------------+----------------+ | dept_name | student_number | +-------------+----------------+ | Engineering | 2 | | Science | 1 | | Law | 0 | +-------------+----------------+
三,建表语句
Create table If Not Exists Student (student_id int,student_name varchar(45), gender varchar(6), dept_id int);
Create table If Not Exists Department (dept_id int, dept_name varchar(255));
Truncate table Student;
insert into Student (student_id, student_name, gender, dept_id) values ('1', 'Jack', 'M', '1');
insert into Student (student_id, student_name, gender, dept_id) values ('2', 'Jane', 'F', '1');
insert into Student (student_id, student_name, gender, dept_id) values ('3', 'Mark', 'M', '2');
Truncate table Department;
insert into Department (dept_id, dept_name) values ('1', 'Engineering');
insert into Department (dept_id, dept_name) values ('2', 'Science');
insert into Department (dept_id, dept_name) values ('3', 'Law');
四,分析
题解:
表1:学生表
字段:学生id,学生姓名,学生性别,班级id
表2:班级表
班级id,班级姓名
求每个班级一共有多少个学生,统计包括没学生的也要
第一步,连接两个表 用左连接 以班级为主 连接学生表
第二步: 一班级分组,count学生id的数量 最后按照要求排序 改名输出
五,SQL解答
with t1 as (
# select * from department d left join student s on d.dept_id=s.dept_id
select dept_name,student_id from department d left join student s on d.dept_id=s.dept_id
)
select dept_name,count(student_id) as student_number from t1 group by dept_name order by student_number desc ,dept_name;
六,验证
七,知识点总结
- 左连接的练习
- 分组聚合的练习
- 排序的练习
- 求班级中的全部学生人数 没有人数也要显示班级
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用