프로그래머스 SQL Lv.2 문제 풀이 (1)

seo0·2024년 6월 14일

SQL

목록 보기
2/8
post-thumbnail

Select



3월에 태어난 여성 회원 목록 출력하기

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

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) = '03'
   AND GENDER = 'W'
   AND TLNO IS NOT NULL

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

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

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

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

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

   SELECT A.ITEM_ID
        , C.ITEM_NAME
        , C.RARITY
     FROM ITEM_TREE A 
LEFT JOIN ITEM_INFO B 
       ON A.PARENT_ITEM_ID = B.ITEM_ID
LEFT JOIN ITEM_INFO C 
       ON A.ITEM_ID = C.ITEM_ID
    WHERE B.RARITY = 'RARE'
 ORDER BY A.ITEM_ID DESC

조건에 맞는 개발자 찾기

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

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

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

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

   SELECT COUNT(0) AS FISH_COUNT
     FROM FISH_INFO A
LEFT JOIN FISH_NAME_INFO B
       ON A.FISH_TYPE = B.FISH_TYPE
    WHERE B.FISH_NAME IN ('BASS', 'SNAPPER')

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

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

    SELECT A.ID
         , A.GENOTYPE
         , B.GENOTYPE AS PARENT_GENOTYPE
     FROM ECOLI_DATA A
LEFT JOIN ECOLI_DATA B
       ON A.PARENT_ID = B.ID
    WHERE A.GENOTYPE & B.GENOTYPE = B.GENOTYPE
 ORDER BY A.ID




SUM, MAX, MIN



최솟값 구하기

동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT MIN(DATETIME)
  FROM ANIMAL_INS

동물 수 구하기

동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT COUNT(0) AS COUNT
  FROM ANIMAL_INS

중복 제거하기

동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

SELECT COUNT(DISTINCT NAME)
  FROM ANIMAL_INS

가격이 제일 비싼 식품의 정보 출력하기

FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.

  SELECT *
    FROM FOOD_PRODUCT
ORDER BY PRICE DESC
   LIMIT 1

조건에 맞는 아이템들의 가격의 총합 구하기

ITEM_INFO 테이블에서 희귀도가 'LEGEND'인 아이템들의 가격의 총합을 구하는 SQL문을 작성해 주세요. 이때 컬럼명은 'TOTAL_PRICE'로 지정해 주세요.

SELECT SUM(PRICE) AS TOTAL_PRICE
  FROM ITEM_INFO
 WHERE RARITY = 'LEGEND'

연도별 대장균 크기의 편차 구하기

분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.

  SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR
       , MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE)) - SIZE_OF_COLONY AS YEAR_DEV
       , ID
    FROM ECOLI_DATA
ORDER BY YEAR
       , YEAR_DEV




GROUP BY



고양이와 개는 몇 마리 있을까

동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

  SELECT ANIMAL_TYPE
       , COUNT(ANIMAL_TYPE) AS count
    FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

동명 동물 수 찾기

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

  SELECT NAME
       , COUNT(NAME) AS COUNT
    FROM ANIMAL_INS
GROUP BY NAME
  HAVING COUNT >= 2
ORDER BY NAME

입양 시각 구하기 (1)

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

  SELECT HOUR(DATETIME) AS HOUR
       , COUNT(ANIMAL_ID) AS COUNT
    FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
  HAVING HOUR >= 9 AND HOUR <= 19
ORDER BY HOUR

가격대 별 상품 개수 구하기

PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.

  SELECT FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP
       , COUNT(PRODUCT_ID)
    FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP

진료과 별 총 예약 횟수 출력하기

APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요. 이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.

  SELECT MCDP_CD AS '진료과코드'
       , COUNT(APNT_NO) AS '5월예약건수'
    FROM APPOINTMENT 
   WHERE APNT_YMD LIKE '2022-05%'
GROUP BY MCDP_CD
ORDER BY 2, 1

성분으로 구한 아이스크림 총 주문량

상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.

   SELECT INGREDIENT_TYPE
        , SUM(A.TOTAL_ORDER) AS TOTAL_ORDER
     FROM FIRST_HALF A
LEFT JOIN ICECREAM_INFO B
       ON A.FLAVOR = B.FLAVOR
 GROUP BY B.INGREDIENT_TYPE
 ORDER BY TOTAL_ORDER

자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요.

  SELECT CAR_TYPE
       , COUNT(CAR_ID) AS CARS
    FROM CAR_RENTAL_COMPANY_CAR 
   WHERE OPTIONS LIKE '%통풍시트%'
      OR OPTIONS LIKE '%열선시트%'
      OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

조건에 맞는 사원 정보 조회하기

HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보를 조회하려 합니다. 2022년도 평가 점수가 가장 높은 사원들의 점수, 사번, 성명, 직책, 이메일을 조회하는 SQL문을 작성해주세요.
2022년도의 평가 점수는 상,하반기 점수의 합을 의미하고, 평가 점수를 나타내는 컬럼의 이름은 SCORE로 해주세요.

   SELECT SUM(B.SCORE) AS SCORE
        , A.EMP_NO
        , A.EMP_NAME
        , A.POSITION
        , A.EMAIL
     FROM HR_EMPLOYEES A
LEFT JOIN HR_GRADE B
       ON A.EMP_NO = B.EMP_NO
      AND B.YEAR = '2022'
 GROUP BY A.EMP_NO
 ORDER BY SCORE DESC
    LIMIT 1

노션별 평균 역 사이 거리 조회하기

SUBWAY_DISTANCE 테이블에서 노선별로 노선, 총 누계 거리, 평균 역 사이 거리를 노선별로 조회하는 SQL문을 작성해주세요.
총 누계거리는 테이블 내 존재하는 역들의 역 사이 거리의 총 합을 뜻합니다. 총 누계 거리와 평균 역 사이 거리의 컬럼명은 각각 TOTAL_DISTANCE, AVERAGE_DISTANCE로 해주시고, 총 누계거리는 소수 둘째자리에서, 평균 역 사이 거리는 소수 셋째 자리에서 반올림 한 뒤 단위(km)를 함께 출력해주세요.
결과는 총 누계 거리를 기준으로 내림차순 정렬해주세요.

  SELECT ROUTE
       , CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE
       , CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE
    FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY SUM(D_BETWEEN_DIST) DESC

물고기 종류 별 잡은 수 구하기

FISH_NAME_INFO에서 물고기의 종류 별 물고기의 이름과 잡은 수를 출력하는 SQL문을 작성해주세요.
물고기의 이름 컬럼명은 FISH_NAME, 잡은 수 컬럼명은 FISH_COUNT로 해주세요.
결과는 잡은 수 기준으로 내림차순 정렬해주세요.

   SELECT COUNT(A.ID) AS FISH_COUNT
        , B.FISH_NAME
     FROM FISH_INFO A
LEFT JOIN FISH_NAME_INFO B
       ON A.FISH_TYPE = B.FISH_TYPE
 GROUP BY B.FISH_NAME
 ORDER BY FISH_COUNT DESC

월별 잡은 물고기 수 구하기

월별 잡은 물고기의 수와 월을 출력하는 SQL문을 작성해주세요.
잡은 물고기 수 컬럼명은 FISH_COUNT, 월 컬럼명은 MONTH로 해주세요.
결과는 월을 기준으로 오름차순 정렬해주세요.
단, 월은 숫자형태 (1~12) 로 출력하며 9 이하의 숫자는 두 자리로 출력하지 않습니다. 잡은 물고기가 없는 월은 출력하지 않습니다.

  SELECT COUNT(ID) AS FISH_COUNT
       , MONTH(TIME) AS MONTH
    FROM FISH_INFO 
GROUP BY MONTH(TIME)
ORDER BY MONTH(TIME)




0개의 댓글