https://school.programmers.co.kr/learn/courses/30/lessons/157340
자동차 대여 기록에서 대여중/대여 가능 여부 구분하기
- 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시\, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시
- 자동차 ID와 AVAILABILITY 리스트를 출력
- 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시
- 자동차 ID를 기준으로 내림차순 정렬
SELECT CAR_ID,
CASE
WHEN CAR_ID IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE) THEN '대여중'
ELSE '대여 가능'
END AS ABAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
https://school.programmers.co.kr/learn/courses/30/lessons/77487
헤비 유저가 소유한 장소
- 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회
SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID IN (SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*) > 1)
ORDER BY ID
https://school.programmers.co.kr/learn/courses/30/lessons/62284
우유와 요거트가 담긴 장바구니
- 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회
SELECT CART_ID
FROM CART_PRODUCTS
WHERE CART_ID IN (SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'MILK')
AND CART_ID IN (SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME = 'YOGURT')
GROUP BY CART_ID
ORDER BY CART_ID
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('MILK', 'YOGURT')
GROUP BY CART_ID
HAVING COUNT(DISTINCT(NAME)) = 2
ORDER BY CART_ID
https://school.programmers.co.kr/learn/courses/30/lessons/157342
자동차 평균 대여 기간 구하기
- 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간 리스트를 출력
- 평균 대여 기간은 소수점 두번째 자리에서 반올림
- 평균 대여 기간을 기준으로 내림차순 정렬, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE) + 1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
* 날짜 연산에 -를 했는데 월이 넘어가는 계산은 안된다. 그래서 DATEDIFF 함수를 사용해야 한다.
https://school.programmers.co.kr/learn/courses/30/lessons/151138
자동차 대여 기록에서 장기/단기 대여 구분하기
- 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼을 추가하여 대여기록을 출력
- 대여 기록 ID를 기준으로 내림차순 정렬
SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, '%Y-%m-%d'), DATE_FORMAT(END_DATE, '%Y-%m-%d'),
CASE
WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN '장기 대여'
ELSE '단기 대여'
END
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) = 9
ORDER BY HISTORY_ID DESC
https://school.programmers.co.kr/learn/courses/30/lessons/133027
주문량이 많은 아이스크림들 조회하기
- 7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회
SELECT F.FLAVOR
FROM FIRST_HALF F JOIN JULY J
USING (FLAVOR)
GROUP BY F.FLAVOR
ORDER BY (SUM(F.TOTAL_ORDER) + SUM(J.TOTAL_ORDER)) DESC
LIMIT 3
https://school.programmers.co.kr/learn/courses/30/lessons/164671
조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기
- 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회
- 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬
- 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력
SELECT CONCAT('/home/grep/src/', F.BOARD_ID, '/', F.FILE_ID, F.FILE_NAME, F.FILE_EXT)
FROM USED_GOODS_BOARD B JOIN USED_GOODS_FILE F
USING (BOARD_ID)
WHERE F.BOARD_ID = (SELECT BOARD_ID
FROM USED_GOODS_BOARD
ORDER BY VIEWS DESC
LIMIT 1)
ORDER BY FILE_ID DESC
https://school.programmers.co.kr/learn/courses/30/lessons/144856
저자 별 카테고리 별 매출액 집계하기
- 2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하고
- 저자 ID, 저자명, 카테고리, 매출액 리스트를 출력
- 저자 ID를 오름차순 정렬, 저자 ID가 같다면 카테고리를 내림차순 정렬
SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM(S.SALES * B.PRICE)
FROM BOOK B JOIN AUTHOR A USING(AUTHOR_ID)
JOIN BOOK_SALES S USING (BOOK_ID)
WHERE MONTH(S.SALES_DATE) = 1
GROUP BY AUTHOR_ID, CATEGORY
ORDER BY AUTHOR_ID, CATEGORY DESC
'SQL' 카테고리의 다른 글
[SQL] PROGRAMMERS SQL - 11 (0) | 2023.08.03 |
---|---|
[SQL] PROGRAMMERS SQL - 9 (0) | 2023.08.01 |
[SQL] PROGRAMMERS SQL - 8 (0) | 2023.07.31 |
[SQL] PROGRAMMERS SQL - 7 (0) | 2023.07.30 |
[SQL] PROGRAMMERS SQL - 6 (0) | 2023.07.29 |