Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- group by
- 티스토리챌린지
- bfs
- Lv. 0
- softeer
- 파이썬
- Lv. 2
- level 3
- SQL
- select
- DP
- Java
- 너비 우선 탐색
- Lv. 3
- dfs
- 오블완
- 동적계획법
- LEVEL 2
- programmers
- javascript
- join
- C언어
- Python
- Dynamic Programming
- Lv. 1
- 깊이 우선 탐색
- 자바스크립트
- SQL 고득점 KIT
- 프로그래머스
- 소프티어
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
[SQL-GROUP BY] 프로그래머스 Lv. 2 조건에 맞는 사원 정보 조회하기 [다시 풀어 보기] 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/284527
정답 코드
WITH TOTAL_SCORES AS (
SELECT
G.EMP_NO,
SUM(G.SCORE) AS SCORE
FROM HR_GRADE G
WHERE G.YEAR = 2022
GROUP BY G.EMP_NO
),
MAX_SCORE AS (
SELECT
MAX(SCORE) AS MAX_SCORE
FROM TOTAL_SCORES
)
SELECT
TS.SCORE,
E.EMP_NO,
E.EMP_NAME,
E.POSITION,
E.EMAIL
FROM TOTAL_SCORES TS
JOIN HR_EMPLOYEES E
ON TS.EMP_NO = E.EMP_NO
JOIN MAX_SCORE MS
ON TS.SCORE = MS.MAX_SCORE
ORDER BY E.EMP_NO;
풀이 과정
- WITH TOTAL_SCORES
- 각 사원의 2022년도 평가 점수 총합을 계산한다.
- SUM(G.SCORE)를 사용하여 상반기와 하반기의 점수를 합산한다.
- 연도는 WHERE G.YEAR = 2022로 필터링하여 2022년 데이터만 계산한다.
- 각 사원별로 점수를 그룹화하기 위해 GROUP BY G.EMP_NO를 사용한다.
- 각 사원의 2022년도 평가 점수 총합을 계산한다.
- WITH MAX_SCORE
- 모든 사원의 총합 점수 중 가장 높은 점수를 계산한다.
- MAX(SCORE)를 사용하여 TOTAL_SCORES에서 최고 점수를 가져온다.
- 모든 사원의 총합 점수 중 가장 높은 점수를 계산한다.
- 최종 SELECT
- 평가 점수가 가장 높은 사원의 정보를 조회한다.
- TOTAL_SCORES와 HR_EMPLOYEES를 조인(JOIN)하여 사원의 세부 정보를 가져온다.
- ON TS.EMP_NO = E.EMP_NO를 통해 사번(EMP_NO)을 기준으로 연결한다.
- TOTAL_SCORES.SCORE와 MAX_SCORE.MAX_SCORE를 비교하여 최고 점수를 받은 사원을 필터링한다.
- 결과는 사번(EMP_NO)을 기준으로 오름차순 정렬한다.
- 평가 점수가 가장 높은 사원의 정보를 조회한다.
느낀점
- 사실 with문이 뭔지 모르기 때문에 그거에 대해서 다시 알아보면 좋을 것 같다.
WITH 문 기본 구조
WITH cte_name AS (
SELECT column1, column2
FROM table_name
WHERE conditions
)
SELECT *
FROM cte_name;
- WITH cte_name AS (...)
- cte_name은 CTE의 이름이다.
- 괄호 안의 쿼리가 실행되어 cte_name이라는 임시 테이블로 저장된다.
- SELECT ... FROM cte_name
- 정의한 cte_name을 메인 쿼리에서 사용하는 방식이다.
WITH 문 사용의 장점
- 복잡한 쿼리를 단순화
- 긴 쿼리를 여러 단계로 나누어 작성할 수 있어 가독성이 높아진다.
- 중첩 서브쿼리를 사용하지 않아도 되어 쿼리 유지보수가 편리하다.
- 코드 재사용
- 동일한 계산이나 조건을 반복적으로 사용할 때 효율적이다.
- 동일한 데이터를 여러 곳에서 참조할 수 있다.
- 임시 테이블 대체
- 테이블을 따로 생성하지 않고, 메모리에서 임시로 데이터를 처리한다.
'SQL > 다시 풀어 보기' 카테고리의 다른 글
[SQL-GROUP BY] 프로그래머스 Lv. 2 물고기 종류 별 잡은 수 구하기 [다시 풀어 보기] (0) | 2024.12.19 |
---|---|
[SQL-GROUP BY] 프로그래머스 Lv. 2 노선별 평균 역 사이 거리 조회하기 [다시 풀어 보기] (0) | 2024.12.19 |
[SQL-MAX] 프로그래머스 Lv. 2 연도별 대장균 크기의 편차 구하기 [다시 풀어 보기] (0) | 2024.12.19 |
[SQL-SELECT] 프로그래머스 Lv. 2 부모의 형질을 모두 가지는 대장균 찾기 [다시 풀어 보기] (0) | 2024.12.19 |
[SQL-SELECT] 프로그래머스 Lv. 2 조건에 맞는 개발자 찾기 [다시 풀어 보기] (0) | 2024.12.18 |