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

seo0·2024년 6월 17일

SQL

목록 보기
3/8
post-thumbnail

IS NULL



NULL 처리하기

입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.

  SELECT ANIMAL_TYPE
       , IFNULL(NAME, 'No name')
       , SEX_UPON_INTAKE
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID

ROOT 아이템 구하기

ROOT 아이템을 찾아 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME)을 출력하는 SQL문을 작성해 주세요. 이때, 결과는 아이템 ID를 기준으로 오름차순 정렬해 주세요.

   SELECT A.ITEM_ID
        , A.ITEM_NAME
     FROM ITEM_INFO A
LEFT JOIN ITEM_TREE B
       ON A.ITEM_ID = B.ITEM_ID
    WHERE B.PARENT_ITEM_ID IS NULL
 ORDER BY A.ITEM_ID




JOIN



상품 별 오프라인 매출 구하기

PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.

  SELECT A.PRODUCT_CODE
       , SUM(A.PRICE * B.SALES_AMOUNT) AS SALES
    FROM PRODUCT A
    JOIN OFFLINE_SALE B
      ON A.PRODUCT_ID = B.PRODUCT_ID
GROUP BY A.PRODUCT_CODE
ORDER BY SALES DESC
       , A.PRODUCT_CODE

조건에 맞는 도서와 저자 리스트 출력하기

'경제' 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.

   SELECT A.BOOK_ID
        , B.AUTHOR_NAME
        , DATE_FORMAT(A.PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
     FROM BOOK A
LEFT JOIN AUTHOR B
       ON A.AUTHOR_ID = B.AUTHOR_ID
    WHERE CATEGORY = '경제'
 ORDER BY A.PUBLISHED_DATE




String, Data



루시와 엘라 찾기

동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.

  SELECT ANIMAL_ID
       , NAME
       , SEX_UPON_INTAKE
    FROM ANIMAL_INS
   WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID

이름에 el이 들어가는 동물 찾기

보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다. 이 사람이 말하길 할머니가 기르던 개는 이름에 'el'이 들어간다고 합니다. 동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다.

  SELECT ANIMAL_ID
       , NAME
    FROM ANIMAL_INS
   WHERE NAME LIKE '%EL%'
     AND ANIMAL_TYPE = 'DOG'
ORDER BY NAME

중성화 여부 파악하기

보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

SELECT ANIMAL_ID
     , NAME
     , CASE WHEN SEX_UPON_INTAKE LIKE 'Neutered%' OR SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O'
            ELSE 'X'
       END AS '중성화'
  FROM ANIMAL_INS

DATETIME에서 DATE로 형 변환

ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜1를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.

  SELECT ANIMAL_ID
       , NAME
       , TO_CHAR(DATETIME, 'YYYY-MM-DD') AS "날짜"
    FROM ANIMAL_INS 
ORDER BY ANIMAL_ID

카테고리 별 상품 개수 구하기

PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.

  SELECT SUBSTRING(PRODUCT_CODE, 1, 2) AS CATEGORY
       , COUNT(PRODUCT_ID)
    FROM PRODUCT
GROUP BY SUBSTRING(PRODUCT_CODE, 1, 2)
ORDER BY CATEGORY

자동차 평균 대여 기간 구하기

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.

  SELECT CAR_ID
       , ROUND(AVG(DATEDIFF(END_DATE, START_DATE) + 1 ), 1) AS AVERAGE_DURATION
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
  HAVING AVG(DATEDIFF(END_DATE, START_DATE) + 1 ) >= 7
ORDER BY AVERAGE_DURATION DESC
       , CAR_ID DESC

조건에 부합하는 중고거래 상태 조회하기

USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요. 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고, 결과는 게시글 ID를 기준으로 내림차순 정렬해주세요.

 SELECT BOARD_ID
      , WRITER_ID
      , TITLE, PRICE
      , CASE WHEN STATUS = 'SALE' THEN '판매중'
             WHEN STATUS = 'RESERVED' THEN '예약중'
             WHEN STATUS = 'DONE' THEN '거래완료'
         END AS STATUS
    FROM USED_GOODS_BOARD
   WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC

연도 별 평균 미세먼지 농도 조회하기

AIR_POLLUTION 테이블에서 수원 지역의 연도 별 평균 미세먼지 오염도와 평균 초미세먼지 오염도를 조회하는 SQL문을 작성해주세요. 이때, 평균 미세먼지 오염도와 평균 초미세먼지 오염도의 컬럼명은 각각 PM10, PM2.5로 해 주시고, 값은 소수 셋째 자리에서 반올림해주세요.
결과는 연도를 기준으로 오름차순 정렬해주세요.

  SELECT YEAR(YM) AS YEAR
       , ROUND(AVG(PM_VAL1), 2) AS PM10
       , ROUND(AVG(PM_VAL2), 2) AS 'PM2.5'
    FROM AIR_POLLUTION
   WHERE LOCATION2 = '수원'
GROUP BY YEAR(YM)
ORDER BY YEAR(YM)

분기별 분화된 대장균의 개체 수 구하기

각 분기(QUARTER)별 분화된 대장균의 개체의 총 수(ECOLI_COUNT)를 출력하는 SQL 문을 작성해주세요. 이때 각 분기에는 'Q' 를 붙이고 분기에 대해 오름차순으로 정렬해주세요. 대장균 개체가 분화되지 않은 분기는 없습니다.

  SELECT CASE WHEN MONTH(DIFFERENTIATION_DATE) IN ('01', '02', '03') THEN '1Q'
              WHEN MONTH(DIFFERENTIATION_DATE) IN ('04', '05', '06') THEN '2Q'
              WHEN MONTH(DIFFERENTIATION_DATE) IN ('07', '08', '09') THEN '3Q'
              ELSE '4Q'
         END AS QUARTER, COUNT(ID) AS ECOLI_COUNT
    FROM ECOLI_DATA 
GROUP BY QUARTER
ORDER BY QUARTER




0개의 댓글