如何编写SQL语句查询2016年请求量最高的电影分类
2016年用户请求量最高电影分类查询SQL
首先基于你提供的数据库结构,默认涉及3张核心表,关联逻辑如下:
categories:电影分类表,包含category_id(分类唯一标识)、category_name(分类名称)字段movies:电影信息表,包含movie_id(电影唯一标识)、category_id(关联分类表的外键)字段user_requests:用户请求记录表,包含request_id(请求唯一标识)、movie_id(关联电影表的外键)、request_time(请求发生时间)字段
如果你只需要取任意一个最高请求量的分类,可直接使用如下SQL:
SELECT c.category_name, COUNT(ur.request_id) AS request_total FROM user_requests ur INNER JOIN movies m ON ur.movie_id = m.movie_id INNER JOIN categories c ON m.category_id = c.category_id WHERE EXTRACT(YEAR FROM ur.request_time) = 2016 GROUP BY c.category_id, c.category_name ORDER BY request_total DESC LIMIT 1;
不同数据库的日期过滤语法可以自行替换:MySQL/SQL Server 可直接用
YEAR(ur.request_time) = 2016,PostgreSQL 可替换为DATE_PART('year', ur.request_time) = 2016
如果需要查询所有并列最高请求量的分类(即满足「最高分类之一」的全量匹配需求),可使用窗口函数实现:
WITH category_request_rank AS ( SELECT c.category_name, COUNT(ur.request_id) AS request_total, RANK() OVER(ORDER BY COUNT(ur.request_id) DESC) AS rank_num FROM user_requests ur INNER JOIN movies m ON ur.movie_id = m.movie_id INNER JOIN categories c ON m.category_id = c.category_id WHERE EXTRACT(YEAR FROM ur.request_time) = 2016 GROUP BY c.category_id, c.category_name ) SELECT category_name, request_total FROM category_request_rank WHERE rank_num = 1;
内容的提问来源于stack exchange,提问作者Kedoku
相关产品推荐
相关产品推荐

