SELECT
대장균들의 자식의수 구하기(Lv3)
문제 설명
문제
풀이
SELECT로 ID, CHILD_COUNT를 조회
JOIN에서 selfjoin으로 ID와 PARENT_ID를 LEFT JOIN으로 연결
* 개념적으로는 이렇게 구현해야 한다는 것을 알았지만, 방법을 잘 몰라 처음에는 WHERE ID=PARENT_ID로 구현함
WHERE ID = PARENT_ID의 의미:
- 이 조건은 동일한 개체가 부모 개체와 자식 개체가 되도록 강제합니다.
- 즉, 동일한 레코드의 ID 값과 PARENT_ID 값이 같아야 하는 경우를 찾는다는 의미가 됩니다.
- 그러나, 문제에서는 부모 개체의 ID와 자식 개체의 PARENT_ID가 서로 다른 행에 있어야 합니다.
이런 문제점 때문에 self join으로 left join을 하는 것이 올바름!
GROUP BY에서 P.ID로 그룹화
ORDER BY에서 P.ID로 오름차순 정렬
SELECT
P.ID,
COUNT(C.ID) AS CHILD_COUNT
FROM
ECOLI_DATA P
LEFT JOIN
ECOLI_DATA C ON P.ID = C.PARENT_ID
GROUP BY
P.ID
ORDER BY
P.ID;
대장균의 크기에 따라 분류하기1 (Lv3)
문제 설명
문제
풀이
WITH에서 SIZE_OF_COLONY별 분류를 설정
SELECT로 ID, SIZE를 조회
ORDER BY에서 ID를 오름차순 정렬
WITH SIZECASE AS (
SELECT ID,
CASE
WHEN SIZE_OF_COLONY <= 100 THEN 'LOW'
WHEN (SIZE_OF_COLONY > 100 AND SIZE_OF_COLONY <= 1000) THEN 'MEDIUM'
WHEN SIZE_OF_COLONY > 1000 THEN 'HIGH'
END AS SIZE
FROM ECOLI_DATA
)
SELECT ID, SIZE
FROM SIZECASE
ORDER BY ID;
GROUP BY
부서별 평균 연봉 조회하기 (Lv3)
문제 설명
문제
풀이
SELECT에서 DEPT_ID, DEPT_NAME_EN, AVG_SAL을 조회
JOIN에서 공통 컬럼인 DEPT_ID로 두 테이블을 JOIN
GROUP BY에서 DEPT_ID, DEPT_NAME_EN으로 그룹화
ORDER BY에서 AVG_SAL을 내림차순 정렬
SELECT D.DEPT_ID, D.DEPT_NAME_EN, ROUND(AVG(E.SAL) ,0) AVG_SAL
FROM HR_DEPARTMENT D
JOIN HR_EMPLOYEES E ON E.DEPT_ID = D.DEPT_ID
GROUP BY D.DEPT_ID, D.DEPT_NAME_EN
ORDER BY AVG_SAL DESC;
String, Date
DATETIME에서 DATE로 형 변환(Lv2)
문제 설명
문제
풀이
SELECT에서 ANIMAL_ID, NAME, 날짜를 조회
* DATE_FORMAT : DATE_FORMAT(date, format) 이런 형식으로 날짜의 형식을 변경할 때 사용하는 함수
ORDER BY에서 ANIMAL_ID 기준으로 오름차순 정렬
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME,'%Y-%m-%d') 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
'SQL > 프로그래머스' 카테고리의 다른 글
프로그래머스 | SQL 스터디 18 (0) | 2024.09.23 |
---|---|
프로그래머스 | SQL 스터디 17 (0) | 2024.09.20 |
프로그래머스 | SQL 스터디 15 (SUBSTIRNG) (2) | 2024.09.17 |
프로그래머스 | SQL 스터디 14 (Union, Union all) (3) | 2024.09.16 |
프로그래머스 | SQL 스터디 13 (0) | 2024.09.15 |