코드카타

[코드카타/3일차]

PARK JI HO 2023. 12. 21. 10:05

일단 다른 사람들의 풀이들을 보니 대부분 join을 이용하여 풀었다.

그치만 나는 아직 join의 개념을 잘 몰라서 풀 수 있는 만큼 최대한 풀었다.

아직 입양을 동물 , 가장 오래 보호소에 있었던 동물 3마리의 이름과

보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

SELECT NAME, DATETIME

FROM ANIMAL_INS

WHERE ANIMAL_ID NOT IN(

SELECT ANIMAL_ID

FROM ANIMAL_OUTS)

ORDER BY DATETIME

LIMIT 3;

 

입양을 가지 못한 동물 중에서 가장 오래된 3마리를 뽑아야 하기 때문에

NOT IN을 통하여 입양을 간 동물들은 제외하였다.

 

2022 1월의 카테고리 도서 판매량을 합산하고, 카테고리(CATEGORY), 판매량(TOTAL_SALES)

리스트를 출력하는 SQL문을 작성해주세요.

결과는 카테고리명을 기준으로 오름차순 정렬해주세요.

select b.category, sum(s.sales)

from booK_sales s , book b

where s.book_id = b.book_id and s.sales_date like '%2022-01%'

group by 1

order by 1

 

book_sales과 book 테이블에서 서로 일치하는 id를 가진 책들 중에서 2022 - 01에 판매된 책들의

카테고리와 총 판매량을 구했다.

 

 

PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 매출액(판매가 * 판매량)

합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면

상품코드를 기준으로 오름차순 정렬해주세요.

SELECT a.product_code, sum(a.price * b.sales_amount) SALES

from product a, offline_sale b

where a.product_id = b.product_id

group by 1

order by 2 DESC, 1

 

각 테이블에서 서로 일치하는 id를 조건으로 a 테이블의 가격과 b 테이블의 판매량을 sum을 통하여 합계를 출력했다.

 

 

관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다.

보호 시작일보다 입양일이 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요.

이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.

SELECT A.ANIMAL_ID , a.NAME

FROM ANIMAL_INS A, ANIMAL_OUTS B

WHERE a.animal_id = b.animal_id and a.datetime > b.datetime

order by a.datetime

 

단순하게 보호 시작일보다 입양일이 더 빠른 것을 찾기 위해 비교 연산자로 비교만 해주었다.

 

 

입양을 동물 , 보호 기간이 가장 길었던 동물 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요.

이때 결과는 보호 기간이 순으로 조회해야 합니다.

SELECT a.animal_id , a.name

from animal_ins a, animal_outs b

where a.animal_id = b.animal_id

order by datediff(b.datetime, a.datetime) desc

limit 2

 

여기서도 단순하게 시간의 차이를 구하고 내림차순하여 그 값이 가장 큰 2개를 조회했다.

 


DATEDIFF

단순히 일 차이를 가져올 때 사용하는 함수

 

- 기본 구조

DATEDIFF(날짜 1, 날짜 2)

간단히 말하자면 날짜1 - 날짜 2 방식으로 작동한다.

 

SELECT DATEDIFF('2018-03-28 23:59:59', '2017-03-01 00:00:00')

을 하게되면 392 출력