[ 알고리즘 ] LeetCode 2298. Tasks Count in the Weekend

이주 weekwith.me·2022년 6월 14일
0

알고리즘

목록 보기
5/73
post-thumbnail

블로그를 이전 중이라 완료되기 전까지는 벨로그에 작성할 계획입니다.
이후 모든 글은 https://weekwith.me 에 작성 예정이니 다른 글이 궁금하시다면 해당 링크를 통해 방문해주세요.

본 글은 [ LeetCode ] 2298. Tasks Count in the Weekend를 풀고 작성한 글입니다.

문제

테이블

Table: Drivers

+-------------+------+
| Column Name | Type |
+-------------+------+
| task_id     | int  |
| assignee_id | int  |
| submit_date | date |
+-------------+------+
task_id is the primary key for this table.
Each row in this table contains the ID of a task, the id of the assignee, and the submission date.

요구사항

Write an SQL query to report:

  • the number of the tasks that were submitted during the weekend (Saturday, Sunday) as weekend_cnt , and
  • the number of the tasks that were submitted during the working days as working_cnt .

Return the result table in any order.

The query result format is shown in the following example.

풀이

접근법

처음에 GROUP BY 구를 사용하여 GROUP BY IF(DAYNAME(submit_date) IN('Saturday', 'Sunday'), 'weekend', 'working days')) 와 같이 표현해서 주말과 평일을 기준으로 묶어서 문제를 해결하려 했다.

하지만 이럴 경우 아래 예시 출력 결과와 같이 하나의 행이 아닌 주말인 경우와 평일인 경우로 나누어져 두 개의 행을 반환한다. 그래서 GROUP BY 구를 사용하지 말아야 한다.

+-------------+-------------+
| weekend_cnt | working_cnt |
+-------------+-------------+
| 0           | 3           |
| 3           | 0           |
+-------------+-------------+

결론적으로 단순히 COUNT 함수에 IF 조건문을 활용해서 문제를 해결할 수 있다. 이때 submit_date 필드의 값이 NULL 인 경우, 다시 말해 정상적인 제출이 되지 않은 경우에 대해서 고민을 해봤는데 테스트 케이스를 돌려본 결과 이번 문제는 이런 경우를 따로 가정하지 않는 것 같았다. task_date 필드 또한 존재해서 작업을 시도한 날짜와 제출이 정상적으로 된 날짜가 각각 존재하는 경우, 혹은 Tasks , Submits 테이블로 나누는 등 다양한 방식으로 문제를 조금 비틀어 내볼 수도 있을 것 같았다.

나의 풀이

접근법에 따라 간단하게 COUNT 함수를 나누어 사용하는데 이때 내부 조건으로 INNOT IN 으로 구별했다.

이때 COUNT 함수는 NULL 값을 무시하는데 이는 SUM 함수 또한 마찬가지다. 연산을 아예 수행하지 않고 건너 뛴다고 생각하면 된다.

SELECT
    COUNT(IF(DAYNAME(submit_date) IN ('Saturday', 'Sunday'), submit_date, NULL)) AS weekend_cnt,
    COUNT(IF(DAYNAME(submit_date) NOT IN ('Saturday', 'Sunday'), submit_date, NULL)) AS working_cnt
FROM Tasks;
profile
Be Happy 😆

0개의 댓글