본문 바로가기

Coding Tests/programmers

SQL 고득점 Kit ( 조건에 맞는 회원 수 구하기 )

 

< 문제 >

 

https://school.programmers.co.kr/learn/courses/30/parts/17042

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

< 풀이 >

 

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 

 

[MS-SQL]COUNT 기본 및 응용법(조건,중복제거)

MSSQL에서 count(*)라는 기본 명령어를 지원해주고 있습니다. 이거는 조회되는 데이터의 갯수를 리턴...

blog.naver.com

 

< sql as 문법 >

 

https://androman.tistory.com/142

 

[Oracle SQL] SELECT 별칭 주기 - AS 사용하기

SELECT 문을 사용할때 결과로 나오는 컬럼에 AS를 사용하여 별칭을 줄 수 있습니다. people 테이블 name age 철수 20 미희 22 테이블에서 정보를 SELECT 하면 다음과 같은 결과가 나옵니다. SELECT * FROM people

androman.tistory.com