< 문제 >
https://school.programmers.co.kr/learn/courses/30/parts/17042
< 풀이 >
SQL 코딩테스트 문제는 처음이었던 것 같습니다. 어려워 보이지는 않지만, SQL을 많이 다뤄보지 않아서 문법에 빈틈이 많았던 것 같습니다.
우선, SQL의 DATE 자료형이 있다는 사실을 잊어버려, 이 날짜에 관한 범위를 어떻게 지정해야 하나.. 꾀나 고심했던 것 같습니다.
둘째로 count( case when... 사용하려 했었던 것이 오랜 시간을 소요하게 만들지 않았나 생각이 듭니다.
범위 값을 토대로 AND 연산을 시행해야 겠다는 생각이 들었고, when 컬럼 명 between "a" AND "b"와 같은 식으로 문제를 해결하였습니다.
아래는 정답 코드입니다.
select count(*) from user_info where joined between "2021-01-01" AND "2021-12-31" and age between 20 AND 29;
머릿속에 있는데, 떠오르지 않았던 구문 LIKE를 활용한 코드입니다.
SELECT COUNT(USER_ID) FROM USER_INFO WHERE JOINED LIKE '2021%' AND AGE BETWEEN 20 AND 29
또 한 가지 가장 처음에 시도했지만, case when 구문을 잘 사용하지 못하여, 오답처리 되었었지만, 수정한 정답 코드입니다.
SELECT COUNT(CASE WHEN JOINED BETWEEN '2021-01-01' AND '2021-12-31' THEN 1 END)
FROM USER_INFO WHERE AGE BETWEEN 20 AND 29;
< 문제 풀며 참고했던 블로그 >
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kjk_lokr&logNo=221799799535
< sql as 문법 >
https://androman.tistory.com/142