SQL_코드카타(2023.12.14)

김수경·2023년 12월 14일

코드카타

목록 보기
4/29

아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

#left join 구문으로 입양날짜 데이터가 없는 동물만 필터링
SELECT i.name,
i.datetime
from animal_ins i left join animal_outs o on i.animal_id=o.animal_id  
where o.datetime is null 
order by 2 
limit 3 

2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 카테고리명을 기준으로 오름차순 정렬해주세요.

SELECT category,
sum(sales) "TOTAL_SALES"
from book b inner join book_sales s on b.book_id = s.book_id  
where date_format(s.sales_date, '%Y%m')=202201 
group by 1 
order by 1 

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

SELECT product_code "상품코드", 
sum(o.sales_amount * p.price) "매출액"
from product p inner join offline_sale o on p.product_id=o.product_id  
group by 1
order by 2 desc, 1 

관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.

SELECT i.animal_id,
i.name 
from animal_ins i inner join animal_outs o on i.animal_id = o.animal_id 
where i.datetime > o.datetime 
order by i.datetime 

입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.

SELECT 
i.animal_id,
i.name
from animal_ins i inner join animal_outs o on i.animal_id=o.animal_id
order by o.datetime-i.datetime desc 
limit 2 

보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화1되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.

SELECT i.animal_id,
i.animal_type,
i.name
from animal_ins i inner join animal_outs o on i.animal_id = o.animal_id
where i.SEX_UPON_INTAKE like '%Intact%' and o.SEX_UPON_OUTCOME not like '%Intact%'
order by 1 

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

SELECT b.book_id,
a.author_name,
date_format(b.published_date,'%Y-%m-%d')
from book b left join author a on b.author_id=a.author_id  
where b.category="경제"
order by 3

FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.

SELECT order_id,
product_id,
date_format(out_date, '%Y-%m-%d'),
case when date_format(out_date, '%Y%m%d') <= 20220501 then '출고완료'
            when date_format(out_date, '%Y%m%d') > 20220501 then '출고대기'
            else '출고미정' end "출고여부"
from food_order 
order by 1 

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

SELECT 
i.INGREDIENT_TYPE,
sum(f.total_order) "TOTAL_ORDER"
from first_half f inner join icecream_info i on f.flavor=i.flavor
group by 1 
order by 2 

동물 보호소에 들어온 동물 중 이름이 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')

BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.

SELECT book_id,
date_format(published_date, '%Y-%m-%d')
FROM book
where date_format(published_date, '%Y') = 2021 and category = '인문'
order by 2

CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력하는 SQL문을 작성해주세요. 이때 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE 로 지정해주세요.

SELECT 
round(avg(daily_fee),0) "AVERAGE_FEE"
from car_rental_company_car 
where car_type = 'SUV'

USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.

#having sum 구문
SELECT u.user_id,
u.nickname,
sum(b.price) "TOTAL_PRICE"
from used_goods_board b left join used_goods_user u on b.writer_id = u.user_id  
where b.status = 'DONE'
group by u.user_id 
having sum(b.price)>= 700000
order by 3

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

###case when 구문으로 작성하여 정답은 맞으나 모든 구간을 이렇게 쓸 수는 없을 것 같다.
SELECT case when price between 0 and 9999 then 0
         when price between 10000 and 19999 then 10000
       when price between 20000 and 29999 then 20000
       when price between 30000 and 39999 then 30000
        when price between 40000 and 49999 then 40000
        when price between 50000 and 59999 then 50000
        when price between 60000 and 69999 then 60000
       when price between 70000 and 79999 then 70000
       when price between 80000 and 89999 then 80000
       when price between 80000 and 99999 then 90000
        end "PRICE_GROUP",
count(price) "PRODUCTS"
from product 
group by 1
order by 1
#정답지를 보니, floor구문 사용. 
# >>> FLOOR 함수는 소수점 첫째 자리에서 버림하는 함수로, 주어진 숫자와 가장 근접한 작은 정수를 출력한다. 
SELECT FLOOR(price/10000)*10000 PRICE_GROUP
    ,count(price) PRODUCTS
from product 
group by 1
order by 1
profile
잘 하고 있는겨?

0개의 댓글