题目描述
(通过次数528 | 提交次数628,通过率84.08%)
表: Tasks +-------------+------+ | Column Name | Type | +-------------+------+ | task_id | int | | assignee_id | int | | submit_date | date | +-------------+------+ task_id 是此表的主键。 此表中的每一行都包含任务 ID、委托人 ID 和提交日期。 编写一个 SQL 来查询: 在周末 (周六,周日) 提交的任务的数量weekend_cnt,以及 工作日内提交的任务数 working_cnt。 按 任意顺序 返回结果表。 查询结果格式如以下示例所示。 示例 1: 输入: Tasks 表: +---------+-------------+-------------+ | task_id | assignee_id | submit_date | +---------+-------------+-------------+ | 1 | 1 | 2022-06-13 | | 2 | 6 | 2022-06-14 | | 3 | 6 | 2022-06-15 | | 4 | 3 | 2022-06-18 | | 5 | 5 | 2022-06-19 | | 6 | 7 | 2022-06-19 | +---------+-------------+-------------+ 输出: +-------------+-------------+ | weekend_cnt | working_cnt | +-------------+-------------+ | 3 | 3 | +-------------+-------------+ 解释: Task 1 是在周一提交的。 Task 2 是在周二提交的。 Task 3 是在周三提交的。 Task 4 是在周六提交的。 Task 5 是在周日提交的。 Task 6 是在周日提交的。 3 个任务是在周末提交的。 3 个任务是在工作日提交的。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/tasks-count-in-the-weekend
//测试数据 Create table If Not Exists Tasks (task_id int, assignee_id int, submit_date date); insert into Tasks (task_id, assignee_id, submit_date) values ('1', '1', '2022-06-13'); insert into Tasks (task_id, assignee_id, submit_date) values ('2', '6', '2022-06-14'); insert into Tasks (task_id, assignee_id, submit_date) values ('3', '6', '2022-06-15'); insert into Tasks (task_id, assignee_id, submit_date) values ('4', '3', '2022-06-18'); insert into Tasks (task_id, assignee_id, submit_date) values ('5', '5', '2022-06-19'); insert into Tasks (task_id, assignee_id, submit_date) values ('6', '7', '2022-06-19');
解题思路
Tasks表中保存了所有的任务信息。包括任务的提交时间。
题目要求:计算周末、周中提交的任务总数。
那么,首先,我们需要计算出每一天是属于周末(周六~周日)还是周中(周一~周五)。
在MySQL数据库中,可以使用weekday函数来返回某个日期为周几。周一返回0,周二返回1,以此类推。
计算出每天是周几后,再使用CASE WHEN来判断是属于周末还是周中,最后使用GROUP BY + SUM汇总统计即可。
参考SQL
未特别说明的情况下,参考SQL为基于MySQL8.0实现。
select sum(case when weekday(submit_date) in (5,6) then 1 else 0 end) weekend_cnt, sum(case when weekday(submit_date) not in (5,6) then 1 else 0 end) working_cnt from Tasks;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。