Programmers SQL 문제 풀기

나나·2025년 5월 7일
0

SELECT: 상위 n개 레코드

문제

  • 동물 보호소에 가장 먼저 들어온 동물의
  • 이름을 조회하는 SQL 문을 작성해주세요.

코드

-- 코드를 입력하세요
SELECT NAME
FROM ANIMAL_INS 
ORDER BY DATETIME
LIMIT 1;

설명

DATETIME이 가장 작은 동물의 이름을 출력해야하므로, 정렬하고 LIMIT 1을 사용해주었습니다.

SELECT: 조건에 맞는 회원수 구하기

문제

USER_INFO 테이블에서

  • 2021년에 가입한 회원 중
  • 나이가 20세 이상 29세 이하인 회원이
  • 몇 명인지 출력하는 SQL문을 작성해주세요.

코드

-- 코드를 입력하세요
SELECT COUNT(*) AS 'COUNT'
FROM USER_INFO 
WHERE YEAR(JOINED) = '2021'
    AND AGE BETWEEN 20 AND 29;

설명

2021년에 가입하고 나이가 20세 이상 29세 이하의 조건은 WHERE절에서 명시합니다.
필터링 된 행의 개수가 정답이므로 COUNT함수를 사용해줍니다.

SELECT: 업그레이드 된 아이템 구하기

⭐⭐

문제

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

코드

-- 코드를 작성해주세요
WITH RARE AS
    (SELECT ITEM_ID
    FROM ITEM_INFO 
    WHERE RARITY = 'RARE')
    
SELECT I.ITEM_ID, I.ITEM_NAME, I.RARITY
FROM ITEM_INFO AS I JOIN ITEM_TREE AS T ON I.ITEM_ID = T.ITEM_ID
WHERE T.PARENT_ITEM_ID IN (SELECT * FROM RARE)
ORDER BY I.ITEM_ID DESC;

설명

WITH절을 활용해 RARE인 아이템을 필터링합니다. 사실 지금 생각해보니 간단한 쿼리문이라 서브쿼리에 바로 있어도 무관할 듯 합니다.

그 후, 자신이 RARE일 때 그 다음 아이템의 정보를 추출하는 것이기 때문에 PARENT_ITEM_ID가 RARE인 경우를 WHERE절에서 필터링했습니다.

SELECT: Python 개발자 찾기

문제

DEVELOPER_INFOS 테이블에서

  • Python 스킬을 가진 개발자의 정보를 조회하려 합니다.
  • Python 스킬을 가진 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.
  • 결과는 ID를 기준으로 오름차순 정렬해 주세요.

코드

-- 코드를 작성해주세요
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS 
WHERE SKILL_1 = 'Python'
    OR SKILL_2 = 'Python'
    OR SKILL_3 = 'Python'
ORDER BY ID;

설명

SKILL1,2,3 중 Python이 있으면 되므로 WHERE절에서 필터링해줍니다.

SELECT: 조건에 맞는 개발자 찾기

⭐⭐

문제

DEVELOPERS 테이블에서

  • Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다.
  • 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.
  • 결과는 ID를 기준으로 오름차순 정렬해 주세요.

코드

SELECT DISTINCT(D.ID), D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS D JOIN SKILLCODES S ON D.SKILL_CODE & S.CODE
WHERE S.NAME = 'C#' OR S.NAME = 'Python'
ORDER BY ID;

설명

비트 연산자 &를 사용해주어야 하는 어려운 문제였습니다.
저는 비트 연산자를 쿼리로 사용해본 적이 없어서 여러 해설들을 통해 답변을 작성했습니다.

만약 C#의 코드가 2(0010)이고 Python의 코드가 4(0100)라면, 둘다 가진 개발자는 6(0110)이 되므로 비트 연산자 &(AND)를 사용해주어야 합니다.

profile
데이터에서 의사결정으로

0개의 댓글