[Select 21~28] SQL 코딩테스트 고득점 Kit

강다겸·2025년 7월 20일
post-thumbnail

Programmers SQL 코딩테스트 고득점 Kit
SELECT 문제 21번 ~ 28번까지 LV2 이상 문제 정답 쿼리입니다.
(Level 1 문제들은 너무 쉬운 관계로.. 이번 게시물부터는 level 2 이상인 문제만 작성하도록 하겠습니다)

21. 업그레이드 된 아이템 구하기 (LV2)
23. 조건에 맞는 개발자 찾기 (LV2)
26. 특정 물고기를 잡은 총 수 구하기 (LV2)
27. 대장균들의 자식의 수 구하기 (LV2)
28. 대장균의 크기에 따라 분류하기 1 (LV2)

21. 업그레이드 된 아이템 구하기 (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

23. 조건에 맞는 개발자 찾기 (LV2)

정답:

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

26. 특정 물고기를 잡은 총 수 구하기 (LV2)

정답:

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'

27. 대장균들의 자식의 수 구하기 (LV2)

정답:

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 방향.. 연습만이 답이다 😔

28. 대장균의 크기에 따라 분류하기 1 (LV2)

정답:

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

0개의 댓글