SELECT
⭐특정 세대의 대장균 찾기(Lv4)
문제 설명
더 좋은 풀이법이 있어서 출처를 남기고 올립니다.
WITH에서 GNEREATION을 설정합니다
1세대의 경우, PARENT_ID가 NULL인 것이 1세대 입니다.
UNION ALL로 중복이 없게 합치고
추가적으로 PARENT_ID를 가지는 ID를 JOIN해서 세대를 추가합니다.
이렇게 푸는 것이 더 좋은 이유는 유지, 보수 측면에서 더 용이하기 때문입니다.
세대라는 칼럼을 추가해서 향후에도 세대를 찾고 싶을때 더 편하게 찾을 수 있죠
WITH RECURSIVE CTE AS (
SELECT ID, 1 AS GENERATION -- 1세대
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
UNION ALL
SELECT D.ID, C.GENERATION + 1 -- 세대 추가
FROM ECOLI_DATA D
JOIN CTE C ON D.PARENT_ID = C.ID
)
SELECT ID
FROM CTE
WHERE GENERATION = 3
ORDER BY ID;
GROUP BY
특정 조건을 만족하는 물고기 별 수와 최대 길이 구하기 (Lv3)
문제 설명
문제
풀이
SELECT에서 FISH_COUNT, MAX_LENGTH, FISH_TYPE를 조회
GROUP BY에서 FISH_TYPE으로 그룹화
HAVING에서 IFNULL(LENGTH,10)으로 NULL인 값은 10으로 바꿔주고, 그 값들의 평균이 33이상인지 설정
(WHERE로 쓰면 오류남! 그룹화를 한 값에 대해서는 HAVING을 써야한다!!)
ORDER BY에서 FISH_TYPE 를 오름차순 정렬
SELECT COUNT(*) FISH_COUNT,
MAX(LENGTH) MAX_LENGTH,
FISH_TYPE
FROM FISH_INFO
GROUP BY FISH_TYPE
HAVING AVG(IFNULL(LENGTH, 10)) >= 33
ORDER BY FISH_TYPE;
String, Date
분기별 분화된 대장균의 개체 수 구하기 (Lv2)
문제 설명
문제
풀이
SELECT에서 CASE WHEN으로 분기를 나누고 QUARTER라고 지칭, ECOLI_COUNT를 조회
GROUP BY에서 QUARTER별로 그룹화
ORDER BY에서 QUARTER 오름차순 정렬
SELECT
CASE
WHEN MONTH(DIFFERENTIATION_DATE) >= 1 AND MONTH(DIFFERENTIATION_DATE) <= 3 THEN '1Q'
WHEN MONTH(DIFFERENTIATION_DATE) >= 4 AND MONTH(DIFFERENTIATION_DATE) <= 6 THEN '2Q'
WHEN MONTH(DIFFERENTIATION_DATE) >= 7 AND MONTH(DIFFERENTIATION_DATE) <= 9 THEN '3Q'
WHEN MONTH(DIFFERENTIATION_DATE) >= 10 AND MONTH(DIFFERENTIATION_DATE) <= 12 THEN '4Q'
END AS QUARTER,
COUNT(*) ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;
조금씩 문제를 풀다보니 어느새 프로그래머스에 있는 SQL 문제들은 다 풀게 되었다.
처음에는 WITH 구문은 어색하기도 하고 잘 쓰지 못했는데, 이제는 나름 능숙하게 다루게 되었다.
SQL이 쉽기는 하지만, 잘못 생각하면 집계를 이상하게 하거나 문법이 틀려서 출력이 안되는 경우도 허다하다.
그렇게 되면 결론도 잘못 도출될 수 있다.
그렇기에 데이터 분석가를 희망한다면 SQL은 정말 잘 다루어야 한다고 생각합니다.
몇 번의 SQL코테를 치면서 느낀점은 '아직도 조금 모자라구나' 였습니다.
그래서 이후에는 leetcode나 hackerrank의 SQL 문제들도 꾸준히 풀 예정입니다.
'SQL > 프로그래머스' 카테고리의 다른 글
프로그래머스 | SQL 스터디 18 (0) | 2024.09.23 |
---|---|
프로그래머스 | SQL 스터디 17 (0) | 2024.09.20 |
프로그래머스 | SQL 스터디 16 (1) | 2024.09.18 |
프로그래머스 | SQL 스터디 15 (SUBSTIRNG) (2) | 2024.09.17 |
프로그래머스 | SQL 스터디 14 (Union, Union all) (3) | 2024.09.16 |