알고리즘/프로그래머스

[프로그래머스 Lv2] SELECT(SQL)

이채림 2024. 11. 20. 23:06
🔍Lv2. 3월에 태어난 여성 회원 목록 출력하기

MEMBER_PROFILE 테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.

SELECT MEMBER_ID, MEMBER_NAME, GENDER, TO_CHAR(DATE_OF_BIRTH, 'YYYY-MM-DD') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE TO_CHAR(DATE_OF_BIRTH, 'YYYY-MM-DD') LIKE '%03%'
AND GENDER = 'W' AND TLNO IS NOT NULL
ORDER BY MEMBER_ID;

🔍Lv2. 재구매가 일어난 상품과 회원 리스트 구하기

ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID ASC, PRODUCT_ID DESC;

🚨🔍Lv2. 업그레이드된 아이템 구하기

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

 

[ 틀린 코드 ]

SELECT i.ITEM_ID, i.ITEM_NAME, i.RARITY
FROM ITEM_INFO i
JOIN ITEM_TREE t ON i.ITEM_ID = t.ITEM_ID
WHERE RARITY = 'RARE' AND t.PARENT_ITEM_ID IS NOT NULL
ORDER BY i.ITEM_ID DESC;

 

[ 원인 ]

조건에 맞는 데이터를 정확히 필터링하지 못했기 때문이다.

문제에서 요구한 아이템의 희귀도가 'RARE'인 아이템들의

모든 다음 업그레이드 아이템(자식 아이템)을 가져오는 것이다.

 

업그레이드된 아이템이 희귀도가 RARE인지, LEGEND인지 관계없이 포함해야 한다.

 

[ 해결법 ]

부모 아이템의 희귀도를 필터링한 뒤, 모든 업그레이드된 아이템을 가져와야 한다.

 

[ 정답 코드 ]

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

🚨🔍Lv2. 조건에 맞는 개발자 찾기

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

 

[ 틀린 코드 ]

SELECT d.ID, d.EMAIL, d.FIRST_NAME, d.LAST_NAME
FROM SKILLCODES s
JOIN DEVELOPERS d ON s.CODE = d.SKILL_CODE
WHERE d.SKILL_CODE IN (
    SELECT CODE 
    FROM SKILLCODES
    WHERE NAME IN ('Python', 'C#')
)
ORDER BY d.ID ASC;

 

(다음에)


Lv2. 특정 물고기를 잡은 총 수 구하기

FISH_INFO 테이블에서 잡은 BASS와 SNAPPER의 수를 출력하는 SQL 문을 작성해주세요. 컬럼명은 'FISH_COUNT`로 해주세요.

SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO i
JOIN FISH_NAME_INFO n ON i.FISH_TYPE = n.FISH_TYPE
WHERE n.FISH_NAME IN ('BASS', 'SNAPPER');

Lv2. 부모의 형질을 모두 가지는 대장균 찾기

부모의 형질을 모두 보유한 대장균의 ID(ID), 대장균의 형질(GENOTYPE), 부모 대장균의 형질(PARENT_GENOTYPE)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 ID에 대해 오름차순 정렬해주세요.