본문 바로가기
코딩테스트/SQL코드카타

SQL 코드카타 31 ~ 40

by worldcenter 2024. 8. 4.

 

31. 오랜 기간 보호한 동물(1)

SELECT ai.NAME , ai.DATETIME
FROM ANIMAL_INS ai LEFT JOIN ANIMAL_OUTS ao
ON ai.ANIMAL_ID = ao.ANIMAL_ID
WHERE ao.DATETIME IS NULL
ORDER BY 2 LIMIT 3;

 

32. 카테고리 별 도서 판매량 집계하기

SELECT CATEGORY, SUM(sales) AS TOTAL_SALES
FROM BOOK b LEFT JOIN BOOK_SALES bs
ON b.book_id = bs.book_id
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '2022-01'
GROUP BY 1
ORDER BY 1;

 

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

SELECT PRODUCT_CODE, SUM(price * sales_amount) AS SALES
FROM PRODUCT p LEFT JOIN OFFLINE_SALE os
ON p.PRODUCT_ID = os.PRODUCT_ID
GROUP BY 1
HAVING SALES IS NOT NULL
ORDER BY 2 DESC, 1;

 

34. 있었는데요 없었습니다

SELECT ai.ANIMAL_ID, ai.NAME
FROM ANIMAL_INS ai INNER JOIN ANIMAL_OUTS ao
ON ai.ANIMAL_ID = ao.ANIMAL_ID
WHERE ai.DATETIME > ao.DATETIME
ORDER BY ai.DATETIME;

 

35. 오랜 기간 보호한 동물(2)

SELECT ai.ANIMAL_ID, ai.NAME
FROM ANIMAL_INS ai INNER JOIN ANIMAL_OUTS ao
ON ai.ANIMAL_ID = ao.ANIMAL_ID
ORDER BY DATEDIFF(ao.DATETIME, ai.DATETIME) DESC LIMIT 2;

 

날짜 차이 가져오기

1) DATEDIFF : 두 날짜 간의 일 차이를 가져올 때 사용하는 함수로 

DATEDIFF(날짜1, 날짜2);

* 날짜1 - 날짜2

 

2) TIMESTAMPDIFF : 차이를 연, 분기, 월, 주, 일, 시, 분, 초를 지정하여 가져올 때 사용하는 함수

TIMESTAMPDIFF(단위, 날짜1, 날짜2);

* 단위

  • SECOND: 초
  • MINUTE : 분
  • HOUR : 시
  • DAY : 일
  • WEEK : 주
  • MONTH : 월
  • QUARTER : 분기
  • YEAR : 연

출처: https://extbrain.tistory.com/78

 

36. 보호소에서 중성화한 동물

SELECT ai.ANIMAL_ID, ai.ANIMAL_TYPE, ai.NAME
FROM ANIMAL_INS ai INNER JOIN ANIMAL_OUTS ao
ON ai.ANIMAL_ID = ao.ANIMAL_ID
WHERE (SEX_UPON_INTAKE LIKE '%Intact%') AND (SEX_UPON_OUTCOME REGEXP 'Spayed|Neutered')
ORDER BY 1;

 

REGEXP 'A | B' 의 경우 단순히 OR이 아니라 'A' 또는 'B'라는 단어가 포함된 모든 행을 찾는 것을 말합니다.

37. 조건에 맞는 도서와 저자 리스트

SELECT BOOK_ID, AUTHOR_NAME, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK b INNER JOIN AUTHOR a
ON b.AUTHOR_ID = a.AUTHOR_ID
WHERE CATEGORY = '경제'
ORDER BY 3;

 

38. 조건별로 분류하여 주문상태 출력하기

SELECT ORDER_ID,PRODUCT_ID,OUT_DATE,
CASE WHEN OUT_DATE <= '2022-05-01' THEN '출고완료'
     WHEN OUT_DATE > '2022-05-01' THEN '출고대기'
     ELSE '출고미정'
     END "출고여부"
FROM(SELECT ORDER_ID,PRODUCT_ID,DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE
FROM FOOD_ORDER)
a
ORDER BY 1;

 

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

SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF fh INNER JOIN ICECREAM_INFO ii
ON fh.FLAVOR = ii.FLAVOR
GROUP BY 1
ORDER BY 2;

-- 또는

SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF fh INNER JOIN ICECREAM_INFO USING(FLAVOR)
GROUP BY 1
ORDER BY 2;

 

JOIN ~ ON 구문 vs JOIN ~ USING 구문 차이점

둘 모두 동일한 기능을 제공하지만, USING 구문을 사용하려면 전제조건이 있습니다.
A테이블과 B테이블에 동일한 컬럼이 존재해야 합니다.
이 때, 동일한 컬럼이란 컬럼명과 타입이 일치하는 것을 말합니다.

 

40. 루시와 엘라 찾기

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

 

 

 

 

'코딩테스트 > SQL코드카타' 카테고리의 다른 글

SQL 코드카타 51 ~ 60  (0) 2024.08.05
SQL 코드카타 41 ~ 50  (0) 2024.08.05
SQL 코드카타 21 ~ 30  (0) 2024.08.04
SQL 코드카타 11 ~ 20  (0) 2024.08.04
SQL 코드카타 1~10  (0) 2024.08.03