
Programmers SQL 코딩테스트 고득점 Kit
SELECT 문제 21번 ~ 28번까지 LV2 이상 문제 정답 쿼리입니다.
(Level 1 문제들은 너무 쉬운 관계로.. 이번 게시물부터는 level 2 이상인 문제만 작성하도록 하겠습니다)
21. 업그레이드 된 아이템 구하기 (LV2)
23. 조건에 맞는 개발자 찾기 (LV2)
26. 특정 물고기를 잡은 총 수 구하기 (LV2)
27. 대장균들의 자식의 수 구하기 (LV2)
28. 대장균의 크기에 따라 분류하기 1 (LV2)
정답:
SELECT f.ITEM_ID
, f.ITEM_NAME
, f.RARITY
FROM ITEM_INFO AS f
LEFT JOIN ITEM_TREE AS t ON f.ITEM_ID = t.ITEM_ID
LEFT JOIN ITEM_INFO AS f2 ON t.PARENT_ITEM_ID = f2.ITEM_ID
WHERE f2.RARITY = 'RARE'
ORDER BY f.ITEM_ID DESC
정답:
SELECT ID
,EMAIL
,FIRST_NAME
,LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (
SELECT CODE
FROM SKILLCODES
WHERE NAME IN ('C#')) != 0
OR SKILL_CODE & (
SELECT CODE
FROM SKILLCODES
WHERE NAME IN ('Python')) != 0
ORDER BY ID
의문점:
처음에는 아래 쿼리로 시도해봤고 결과는 '성공'으로 나오지만 채점시 테스트1~5가 실패로 나오면서 오답으로 뜸 🧐 왜일지 고민해봐야겠다
- 그치만 뭐가 됐든 간에 이진수 플래그 연산자를 알아야 정확하게 & 효율적으로 풀 수 있는 문제였다
SELECT d.ID
, d.EMAIL
, d.FIRST_NAME
, d.LAST_NAME
FROM DEVELOPERS AS d
LEFT JOIN SKILLCODES AS s ON d.SKILL_CODE = s.CODE
WHERE (d.SKILL_CODE & 256) != 0
OR (d.SKILL_CODE & 1024) != 0
ORDER BY d.ID ASC
정답:
SELECT COUNT(ID) AS FISH_COUNT
FROM FISH_INFO AS i
LEFT JOIN FISH_NAME_INFO AS n ON i.FISH_TYPE = n.FISH_TYPE
WHERE n.FISH_NAME = 'BASS'
OR n.FISH_NAME = 'SNAPPER'
정답:
SELECT e1.PARENT_ID
, COUNT(e2.ID)
FROM ECOLI_DATA AS e1
LEFT JOIN ECOLI_DATA AS e2 ON e1.PARENT_ID = e2.ID
GROUP BY e1.PARENT_ID
ORDER BY e2.ID ASC
종종 헷갈리는 JOIN 방향.. 연습만이 답이다 😔
정답:
SELECT ID
, CASE WHEN SIZE_OF_COLONY <= 100 THEN 'LOW'
WHEN SIZE_OF_COLONY <= 1000 THEN 'MEDIUM'
ELSE 'HIGH'
END AS SIZE
FROM ECOLI_DATA
ORDER BY ID ASC