프로그래머스 SQL 고득점 Kit - SELECT 문제 풀이 모음 (MySQL)

정진희·2025년 5월 22일

SQL 문제 풀이

목록 보기
4/6
post-thumbnail

문제 푸는중~ / 아직 풀지 않는 문제의 풀이는 없습니다.

[Lv.1] - 아픈 동물 찾기

SELECT animal_id, name from animal_ins where intake_condition = "sick";

[Lv.1] - 역순 정렬하기

SELECT name, datetime from animal_ins order by animal_id desc;

[Lv.1] - 모든 레코드 조회하기

SELECT * from animal_ins order by animal_id asc;

[Lv.2] - 3월에 태어난 여성 회원 목록 출력하기

SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE MONTH(DATE_OF_BIRTH) = 3 AND GENDER = 'w' AND TLNO IS NOT NULL
ORDER BY MEMBER_ID ASC;

[Lv.2] - 특정 물고기를 잡은 총 수 구하기

  • WHERE FISH_TYPE IN (0, 1); 이 안되는 이유
    • 문제에서 제공된 예제일 뿐, 일반적인 문제 조건에서는 FISH_NAME_INFO 테이블에서 이 값을 확인해야 한다.
    • 하드코딩된 FISH_TYPE 값(0, 1)만 사용할 경우 유연성이 부족하다.
SELECT COUNT(*) FISH_COUNT
FROM FISH_INFO I JOIN FISH_NAME_INFO N USING (FISH_TYPE)
WHERE FISH_NAME IN ('BASS', 'SNAPPER');

[Lv.2] - 재구매가 일어난 상품과 회원 리스트 구하기

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

[Lv.2] - 업그레이드 된 아이템 구하기

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

[Lv.2] - 조건에 맞는 개발자 찾기

  • 풀이 1

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

    SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
    FROM DEVELOPERS
    WHERE SKILL_CODE & (
                        SELECT SUM(CODE)
                        FROM SKILLCODES
                        WHERE NAME IN ('Python', 'C#'))
    ORDER BY ID;

[Lv.2] - 부모의 형질을 모두 가지는 대장균 찾기

SELECT A.ID, A.GENOTYPE, B.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA AS A INNER JOIN ECOLI_DATA AS B ON A.PARENT_ID = B.ID
-- 부모의 형질에도 =(포함되어 있다.) A인 자식의 형질과 B인 부모의 형질에 &(같은 부분이 있는 것이)
WHERE B.GENOTYPE = A.GENOTYPE & B.GENOTYPE
ORDER BY A.ID;

[Lv.3] - 대장균의 크기에 따라 분류하기 1

SELECT ID, CASE
                WHEN SIZE_OF_COLONY <= 100 THEN 'LOW'
                WHEN 100 < SIZE_OF_COLONY AND SIZE_OF_COLONY <= 1000 THEN 'MEDIUM'
                WHEN 1000 < SIZE_OF_COLONY THEN 'HIGH'
            END SIZE
FROM ECOLI_DATA;

[Lv.3] - 대장균의 크기에 따라 분류하기 2

  • 서브쿼리는 alias 꼭 작성해줘야 에러가 나지 않는다.
SELECT ID, CASE
                WHEN RANK_COLONY <= 0.25 THEN 'CRITICAL'
                WHEN RANK_COLONY <= 0.5 THEN 'HIGH'
                WHEN RANK_COLONY <= 0.75 THEN 'MEDIUM'
                ELSE 'LOW'
            END COLONY_NAME
FROM (
      SELECT ID, PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) RANK_COLONY
      FROM ECOLI_DATA
     ) RNAK_TABLE
ORDER BY ID;

[Lv.3] - 대장균들의 자식의 수 구하기

  • COUNT(*) : NULL 포함해서 셈 / COUNT(칼럼명) : NULL 빼고 셈
SELECT P.ID, COUNT(C.ID) AS CHILD_COUNT
FROM ECOLI_DATA AS P
    LEFT JOIN ECOLI_DATA AS C
    ON P.ID = C.PARENT_ID
GROUP BY P.ID
ORDER BY P.ID ASC;
profile
고민하고, 공부해서 발전하는 개발자가 되자🔥

0개의 댓글