문제 링크입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/299308
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문제
각 분기(QUARTER)별 분화된 대장균의 개체의 총 수(ECOLI_COUNT)를 출력하는 SQL 문을 작성해주세요. 이때 각 분기에는 'Q' 를 붙이고 분기에 대해 오름차순으로 정렬해주세요. 대장균 개체가 분화되지 않은 분기는 없습니다.
풀이1 - CASE문 사용
SELECT
CASE
WHEN MONTH(DIFFERENTIATION_DATE) <= 3 THEN '1Q'
WHEN MONTH(DIFFERENTIATION_DATE) <= 6 THEN '2Q'
WHEN MONTH(DIFFERENTIATION_DATE) <= 9 THEN '3Q'
ELSE '4Q'
END AS 'QUARTER',
COUNT(ID) AS 'ECOLI_COUNT'
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER
CASE 문을 사용하여 DIFFERENTIATION_DATE 열에서 월을 추출하고, 각 월을 해당하는 분기에 매핑했습니다.
다음, 각 분기별로 그룹화하여 대장균 개체의 총 수(ECOLI_COUNT) 를 계산했습니다.
이때는 QUARTER 함수가 있는지 모르고 직접 분기를 나누었습니다.
풀이2 - QUARTER(), CONCAT() 사용
SELECT CONCAT(QUARTER(DIFFERENTIATION_DATE), 'Q') AS 'QUARTER',
COUNT(ID) AS 'ECOLI_COUNT'
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER
QUARTER 함수를 사용하여 DIFFERENTIATION_DATE 열에서 분기를 직접 추출했습니다.
CONCAT 함수를 사용하여 추출된 분기 값에 'Q'를 추가하여 표시합니다.
두 쿼리는 분기를 계산하는 방식에서 차이가 있습니다.
두 쿼리에서 사용된 QUARTER, CONCAT 함수에 대해 간단히 설명하겠습니다:
- QUARTER : DATE 또는 DATETIME 값에서 분기를 추출하는 함수. (1부터 4까지 값 반환)
- CONCAT : 하나 이상의 문자열을 결합하여 새로운 문자열을 생성하는 함수
예시)
QUARTER('2024-04-11')은 2를 반환합니다.
CONCAT('Hello ', 'World')는 'Hello World'를 반환합니다.
'Skills > SQL' 카테고리의 다른 글
[프로그래머스] SQL - '특정 조건을 만족하는 물고기별 수와 최대 길이 구하기' 문제풀이 (0) | 2024.04.20 |
---|---|
[프로그래머스] SQL - '업그레이드 할 수 없는 아이템 구하기' 문제풀이 (0) | 2024.04.19 |
[프로그래머스] SQL - '조건에 맞는 사원 정보 조회하기' 문제풀이 (0) | 2024.04.16 |
[프로그래머스] SQL - '대장균의 크기에 따라 분류하기 1' 문제풀이 (0) | 2024.04.15 |
[프로그래머스] SQL - '부서별 평균 연봉 조회하기' 문제풀이 (0) | 2024.04.13 |