一、来源
表: Tasks
+-------------+------+
| Column Name | Type |
+-------------+------+
| task_id | int |
| assignee_id | int |
| submit_date | date |
+-------------+------+
task_id 是该表的主键(具有唯一值的列)。
此表中的每一行都包含任务 ID、委托人 ID 和提交日期。
编写一个解决方案来报告:
- 在周末 (周六,周日) 提交的任务的数量
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 个任务是在工作日提交的。
二、分析
本题比较简单,只需要掌握好weekday函数的用法即可。
三、代码
sql
select sum(weekday(submit_date) in (5, 6)) weekend_cnt,
sum(weekday(submit_date) in (0, 1, 2, 3, 4)) working_cnt
from tasks;
四、总结
weekday函数的用法是传入一个日期,返回这个日期为周几,0代表周一、1代表周二......;
然后就对表中的submit_date字段进行判断,如果为5或者6,代表的就是周六和周末,反之则为工作日。
注意:在sum函数中的条件如果成立则会返回1,反之返回0,然后sum计算出所有的1进行计算,即为符合条件的个数。