SQL 알고리즘 풀기 - 3/23

송현진·2023년 3월 23일

SQL

목록 보기
4/17

가장 비싼 상품 구하기

  • PRODUCT 테이블에서 판매 중인 상품 중 가장 높은 판매가를 출력. 컬럼명은 MAX_PRICE
SELECT max(price) as MAX_PRICE from product
group by price
order by price desc limit 1

흉부외과 또는 일반외과 의사 목록 출력하기

  • DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') as HIRE_YMD from doctor
where mcdp_cd in ('CS','GS')
order by HIRE_YMD desc, DR_NAME asc

12세 이하인 여자 환자 목록 출력하기

  • PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, "NONE") AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;

인기있는 아이스크림

  • 상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬
SELECT FLAVOR from FIRST_HALF 
order by TOTAL_ORDER desc, SHIPMENT_ID;

모든 레코드 조회하기

  • 동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회
SELECT * FROM ANIMAL_INS
ORDER BY ANIMAL_ID

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

  • BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력. 출판일을 기준으로 오름차순
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE FROM BOOK
WHERE PUBLISHED_DATE LIKE '2021%' AND CATEGORY = '인문'

평균 일일 대여 요금 구하기

  • CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력. 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE
SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV'
GROUP BY CAR_TYPE

최댓값 구하기

  • 가장 최근에 들어온 동물은 언제 들어왔는지 조회
SELECT DATETIME FROM ANIMAL_INS
ORDER BY DATETIME DESC
LIMIT 1

과일로 만든 아이스크림 고르기

  • 상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회
SELECT F.FLAVOR 
FROM FIRST_HALF AS F
LEFT JOIN ICECREAM_INFO AS I ON F.FLAVOR = I.FLAVOR
WHERE F.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE LIKE 'FRUIT_BASED'
ORDER BY F.TOTAL_ORDER DESC;

특정 옵션이 포함된 자동차 리스트 구하기

  • CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력
SELECT * FROM CAR_RENTAL_COMPANY_CAR 
WHERE OPTIONS LIKE '%네비게이션%'
ORDER BY CAR_ID DESC

자동차 대여 기록에서 장기/단기 대여 구분하기

  • CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력. 여 기록 ID를 기준으로 내림차순 정렬
SELECT  HISTORY_ID, 
        CAR_ID,
        DATE_FORMAT(START_DATE,"%Y%-%m-%d") as START_DATE, 
        DATE_FORMAT(END_DATE,"%Y-%m-%d") as END_DATE,
     (
        CASE WHEN DATEDIFF(END_DATE,START_DATE) >= 29 THEN '장기 대여'
         ELSE '단기 대여' END
     ) AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
where DATE_FORMAT(START_DATE,"%Y-%m") LIKE '2022-09' 
ORDER BY HISTORY_ID DESC;

조건에 부합하는 중고거래 댓글 조회하기

  • USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회. 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬
SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, 
       R.CONTENTS, DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD B
INNER JOIN USED_GOODS_REPLY R
ON R.BOARD_ID = B.BOARD_ID
WHERE DATE_FORMAT(B.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY R.CREATED_DATE, B.TITLE

중복 제거하기

  • 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회. 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다
SELECT COUNT(DISTINCT(NAME))
FROM ANIMAL_INS
WHERE NAME IS NOT NULL

동물 수 구하기

  • 동물 보호소에 동물이 몇 마리 들어왔는지 조회동물 보호소에 동물이 몇 마리 들어왔는지 조회
SELECT COUNT(*)
FROM ANIMAL_INS

최솟값 구하기

  • 동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회
SELECT DATETIME
FROM ANIMAL_INS
ORDER BY DATETIME LIMIT 1

동명 동물 수 찾기

  • 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회. 이름이 없는 동물은 집계에서 제외. 이름 순으로 조회
SELECT NAME, COUNT(NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME 
HAVING COUNT(NAME) > 1 
ORDER BY NAME

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

  • 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회. 이름 순으로 조회
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog'  AND NAME LIKE ('%EL%') 
ORDER BY NAME

NULL 처리하기

  • 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회. 이름이 없는 동물의 이름은 "No name"으로 표시
SELECT ANIMAL_TYPE, IFNULL(NAME,'No name') AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS

DATETIME에서 DATE로 형 변환

  • ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회. 아이디 순으로 조회
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d' ) AS DATETIME
  FROM ANIMAL_INS
ORDER BY ANIMAL_ID

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

  • FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1

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

  • 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회. 고양이를 개보다 먼저 조회
SELECT ANIMAL_TYPE, COUNT(*)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

중성화 여부 파악하기

  • 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회. 중성화가 되어있다면 'O', 아니라면 'X'라고 표시
SELECT ANIMAL_ID, NAME,
       (CASE WHEN SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O'
             WHEN SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O'
             ELSE 'X' END) AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

입양 시각 구하기(1)

  • 각 시간대별로 입양이 몇 건이나 발생했는지 조회. 시간대 순으로 정렬
SELECT HOUR(DATETIME) AS HOUR, COUNT(*)
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME) HAVING HOUR BETWEEN '9' AND '19'
ORDER BY HOUR(DATETIME)

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

  • PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력. 상품 카테고리 코드를 기준으로 오름차순 정렬
SELECT SUBSTR(PRODUCT_CODE, 1, 2) AS CATEGORY, COUNT(*)
FROM PRODUCT
GROUP BY CATEGORY

💡 DATE_FORMAT(컬럼, '형식')이라는 문법을 새로 배웠다. 날짜를 형식에 따라 보여지게 만들어주는 문법이다. 그리고 CASE WHEN ~ THEN ELSE END를 연습할 수 있어서 좋았다. 그리고 Null인 값들을 대체 해주는 문법인 IFNULL(컬럼,'대체할 값')을 배우게 되었다. Oracle과 MySQL에서의 문법이 다르다는 걸 알았다. 쿼리를 작성하는데 유용한 문법들에 대해 알고 싶어졌다.

profile
개발자가 되고 싶은 취준생

0개의 댓글