티스토리 뷰

프로그래머스 코딩테스트 문제 중에 SQL 고득점 Kit이라는 문제 세트가 있다. 해당 문제들을 직접 풀어서 결과를 정리해 보겠다. 이번 글에서는 GROUP BY를 활용하는 문제들을 풀고 정리한다.

 

문제 1

그룹별로 데이터의 개수를 집계하는 문제이다. SELECT 절에서 COUNT()를 사용하고, GROUP BY를 통해 Cat과 Dog로 그룹을 만들어주면 그룹별로 데이터의 개수를 출력할 수 있다. (마지막에 ORDER BY 지정해주어야 한다. 당연히 알파벳 순서라 Cat -> Dog 순서로 출력되니까 ORDER BY 지정하지 않아도 되는 줄 알았는데 ORDER BY 적어주지 않으면 채점 결과에서 틀렸다고 나온다.)

 

문제 2

NULL인 값을 제외하고 2번 이상 쓰인 이름이어야 하고, 그 이름에 해당하는 데이터가 몇 개 인지 조회하는 문제이다. 우선 WHERE 절에서 IS NOT NULL로 NULL값을 제외한 이름을 조회하도록 하고, GROUP BY로 이름별 그룹을 만들어준다. 그 후, 2번 이상 쓰인 이름을 조회하기 위해서 HAVING 절COUNT() > 1을 사용하였다.

 

문제 3

DATETIME 데이터 중에서 시간만 가져오기 위해서 SELECT 절HOUR(컬럼명)을 사용, HAVING 절시간 조건을 지정해주어 특정 시간 범위 내의 데이터만 조회하도록 한다. DATETIME 데이터에서 연도, 월, 일, 시간, 분, 초 중 하나를 추출하려면 다음을 사용한다. YEAR, MONTH, DAY, HOUR, MINUTE, SECOND.

 

문제 4

테이블에 없는 시간대를 생성하여 시간대별 데이터의 개수를 조회하는 문제이다. SET 구문(SET @변수이름 := 값)을 사용하여 새로운 변수를 생성하여 값을 할당해주고, SELECT 절에 SUBQUERY를 사용한다.

GROUP BY를 안 넣어도 채점 결과는 정답이라고 나오는데, 서브쿼리에서 행해진 연산 결과에 의해서 그룹 지정을 하지 않아도 같은 결과가 나오는 것 같다. 지금까지 푼 문제 중에 조금 난이도가 올라가는 문제들에서 명령어를 조금씩 다르게 입력해도 같은 결과가 나오는 경우가 있는 것을 보면 응용문제로 갈수록 풀이법은 여러 개가 존재할 수 있는 듯하다.

 

 

WHERE와 HAVING의 차이를 기억하기 쉽게

WHERE는 GROUP BY 이전에 쓰이고, HAVING은 GROUP BY 이후에 쓰인다. 집계된 결과에 대하여 조건을 적용할 때 HAVING을 쓴다.

댓글
최근에 올라온 글
페이지 이동 안내

보던 글 목록 : 브라우저 뒤로 가기 메인 화면 : 좌측 상단 아이콘
🍍 The GOAL: AI expert에 가까워지는 중

🍍 I am becoming AI expert who can develop cool things by coding.