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 |