查找最爱学的课程
本文记录解决查找最爱学的课程问题的过程。
背景描述
前面我们已经搭了个简单的课程数据库,现在要根据表中数据找出每个用户最爱学的课程。
目标要求
- MySQL服务处理运行状态
- 查询并将查询结果创建一个新表favorite,包含四列:id, user_name, course_name, study_time。
- favorite表中存储的是所有在usercourse表中有学习记录的用户学习时间最长的课程,如果有多门课程学习时间相同,则都存入该表。
实现过程
首先启动MySQL服务。
$ sudo mysqld_safe &>/dev/null &
将查询结果存入新表可以使用create table tbname as select
语句,而id列可以最后补上,主要难点在于如何查找分组中的最大值。
按正常思路直接查询SQL可能不太好写,不妨反过来想,最大其实等价于没有比它更大的,这样可以转化为计数子查询来解决。
create table favorite as
select u.name user_name, c.name course_name, uc.study_time
from usercourse uc
join user u on u.id=uc.user_id
join course c on c.id=uc.course_id
where 1 > (
select count(distinct(uc1.user_id)) from usercourse uc1
where uc1.user_id=uc.user_id and uc1.study_time>uc.study_time
);
最后需要补充id列。
alter table favorite add id int not null primary key auto_increment first;