프로그래머스 | SQL 스터디 13

2024. 9. 15. 15:29·SQL/프로그래머스

SELECT

업그레이드 된 아이템 구하기(Lv2)

문제 설명

​

문제

아이템의 희귀도가 'RARE'인 아이템들의 모든 다음 업그레이드 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬주세요.

​

풀이

SELECT로 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY) 를 조회

 

JOIN에서 ITEM_INFO, ITEM_TREE를 공통 컬럼인 ITEM_ID로 연결

 

WHERE에서 희귀도가 RARE인 ITEM_ID이 PARENT_ID에 있는 것으로 제한

 

ORDER BY에서 ITEM_ID 순으로 내림차순 정렬

SELECT I.ITEM_ID
    ,I.ITEM_NAME
    ,I.RARITY
FROM ITEM_TREE T
JOIN ITEM_INFO I ON T.ITEM_ID = I.ITEM_ID
WHERE T.PARENT_ITEM_ID IN (
    SELECT ITEM_ID
    FROM ITEM_INFO
    WHERE RARITY = 'RARE'
)
ORDER BY I.ITEM_ID DESC;

 


잔챙이 잡은 수 구하기(Lv1)

문제 설명

​

문제

​

풀이

SELECT로 COUNT를 조회

 

WHERE에서 LENGTH가 NULL인 것으로 제한 (10cm 이하는 NULL이기 때문!)

SELECT COUNT(*) FISH_COUNT
FROM FISH_INFO
WHERE LENGTH IS NULL;

 


GROUP BY

★언어별 개발자 분류하기 (Lv4)

문제 설명

​

문제

 

풀이

SELECT에서 점수, 사번, 성명, 직책, 이메일 을 조회

 

JOIN에서 HR_EMPLOYEES와 HR_GRADE를 공통 컬럼인 EMP_NO로 연결

 

WHERE에서 연도를 2022년으로 제한

 

GROUP BY에서 EMP_NO로 그룹화 (상, 하반기 점수를 합하기 위해서)

​

ORDER BY에서 SCORE를 내림차순 정렬하고 LIMIT 1을 걸면 최고 점수를 가진 사원 조회 가능!

# 동점자 고려X 버전
SELECT SUM(SCORE) SCORE, E.EMP_NO, EMP_NAME, POSITION, EMAIL
FROM HR_EMPLOYEES E
JOIN HR_GRADE G ON G.EMP_NO = E.EMP_NO
WHERE G.YEAR = 2022
GROUP BY G.EMP_NO
ORDER BY SCORE DESC
LIMIT 1;

 

WITH에서 RANKSCORE는 상하반기 합산 점수, 점수에 따라 랭크를 매긴 것을 저장

 

본 쿼리에서는 RANKSCORE 에서 RN=1인 즉 최고 점수의 사원들(동점자들을 고려한)을 조회 가능!

WITH RANKSCORE AS (
    SELECT EMP_NO, SUM(SCORE) SCORE, RANK() OVER (ORDER BY SUM(SCORE) DESC) RN
    FROM HR_GRADE
    WHERE YEAR = 2022
    GROUP BY EMP_NO
)

SELECT SCORE, EMP_NO, EMP_NAME, POSITION, EMAIL
FROM HR_EMPLOYEES E
JOIN RANKSCORE R USING (EMP_NO)
WHERE RN = 1;

 

두 버전으로 나눠서 기록은 했지만, 밑에 있는 RANK를 사용한 버전이 동점자를 고려한 버전이므로 문제가 요구한 2022년 평가 점수가 가장 높은 사원들이라는 요구에 조금 더 적절하다고 생각합니다

 


String, Date

중성화 여부 파악하기(Lv2)

문제 설명

 

문제

​

풀이

SELECT에서 동물의 아이디와 이름, 중성화 여부를 조회

여기서 중성화 여부는 CASE WHEN을 이용하여 'Neutered' 나 'Spayed'가 포함되면 O, 나머지는 X로 처리​

​

ORDER BY에서 ANIMAL_ID를 오름차순 정렬

SELECT ANIMAL_ID, NAME, 
    CASE
        WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
        ELSE 'X'
    END AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
저작자표시 비영리 변경금지 (새창열림)

'SQL > 프로그래머스' 카테고리의 다른 글

프로그래머스 | SQL 스터디 15 (SUBSTIRNG)  (2) 2024.09.17
프로그래머스 | SQL 스터디 14 (Union, Union all)  (3) 2024.09.16
프로그래머스 | SQL 스터디 12  (0) 2024.09.15
프로그래머스 | SQL 스터디 11 (비트연산자 &)  (1) 2024.09.11
프로그래머스 | SQL 스터디 10  (2) 2024.09.10
'SQL/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | SQL 스터디 15 (SUBSTIRNG)
  • 프로그래머스 | SQL 스터디 14 (Union, Union all)
  • 프로그래머스 | SQL 스터디 12
  • 프로그래머스 | SQL 스터디 11 (비트연산자 &)
kimmalgu
kimmalgu
DA(데이터 분석가) 취준생 블로그
  • kimmalgu
    kimmalgu 님의 블로그
    kimmalgu
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 통계 (3)
      • [패캠] 데이터분석 부트캠프 (10)
        • 프로젝트 (2)
        • 수업 정리 (8)
      • 파이썬 (8)
        • 통계전산처리 (7)
      • SQL (27)
        • 프로그래머스 (20)
        • HackerRank (5)
        • LeetCode (1)
      • 코테 (0)
      • 독후감 (5)
  • 블로그 메뉴

    • 글쓰기
    • 홈
    • 태그
    • 방명록
  • hELLO· Designed By정상우.v4.10.0
kimmalgu
프로그래머스 | SQL 스터디 13
상단으로

티스토리툴바