즐겨찾기가 가장 많은 식당 정보 출력하기
SELECT B.FOOD_TYPE, B.REST_ID, B.REST_NAME, B.FAVORITES
FROM (
SELECT FOOD_TYPE,
MAX(FAVORITES) AS MAX_FAVORITE
FROM REST_INFO
GROUP BY FOOD_TYPE
) A
INNER JOIN REST_INFO B
ON A.FOOD_TYPE = B.FOOD_TYPE
AND A.MAX_FAVORITE = B.FAVORITES
ORDER BY FOOD_TYPE DESC;
조건에 맞는 사용자와 총 거래금액 조회하기
SELECT
B.USER_ID,
B.NICKNAME,
A.PRICE_SUM
FROM (
SELECT
WRITER_ID,
SUM(PRICE) AS PRICE_SUM
FROM
USED_GOODS_BOARD
WHERE
STATUS = 'DONE'
GROUP BY
WRITER_ID
) A
JOIN USED_GOODS_USER B ON A.WRITER_ID = B.USER_ID
WHERE
PRICE_SUM >= 700000
ORDER BY
PRICE_SUM;
자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
1) dictinct 테이블과 대여중인 car_id 테이블과 join
처음에 history테이블에서 '2022-10-16'일이 start_date와 end_date 안에 있으면 '대여중' 아니면 '대여 가능'으로 표시하도록 case when 으로 표현하다가 history 테이블이라 car_id가 여러개 나타나는 것을 확인하였다.
그래서 where절로 대여중인 car_id 리스트를 뽑은 후, car_id 를 distinct한 테이블에 join한 후, 대여 중이 아닌 car_id를 '대여 가능'으로 표현하도록 작성하였다.
SELECT DISTINCT a.CAR_ID AS car_id,
CASE
WHEN AVAILABILITY IS NULL THEN '대여 가능'
ELSE '대여중'
END AS AVAILABILITY
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY a
LEFT JOIN
(SELECT
CAR_ID,
'대여중' AS AVAILABILITY
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE
DATE('2022-10-16') BETWEEN START_DATE AND END_DATE
) b
ON a.CAR_ID = b.CAR_ID
ORDER BY
CAR_ID DESC;
2) group by + 대여 중인 car_id 테이블 서브쿼리
다른 문제 풀이 방법으로는 서브쿼리로 2022-10-16일이 대여 시작일자와 종료 일자 사이에 있는 CAR_ID 리스트를 구한 후,
GROUP BY로 CAR_ID 별로 묶어 CAR_ID가 대여 가능 CAR_ID 리스트 안에 있으면 '대여중'으로 그렇지 않으면 '대여 가능'으로 표시하도록 CASE WHEN으로 표현할 수 있다.
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 "AVAILABILITY"
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN DATE('2022-08-01') AND DATE('2022-10-31')
AND CAR_ID IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN DATE('2022-08-01') AND DATE('2022-10-31')
GROUP BY CAR_ID
HAVING COUNT(CAR_ID) >= 5
)
GROUP BY MONTH(START_DATE), CAR_ID
HAVING COUNT(*) > 0
ORDER BY MONTH, CAR_ID DESC ;
'Algorithm' 카테고리의 다른 글
<백준 13335 : 트럭> 문제풀이 with python (4) | 2024.11.09 |
---|---|
[TIL] 99클럽 코테 스터디 13일차 TIL - 이진탐색 : 백준 10561 징검다리 문제 풀이 with python (0) | 2024.11.09 |
[TIL] 99클럽 코테 스터디 7일차 TIL - <프로그래머스 : 10561 징검다리> 문제 풀이 with python (0) | 2024.11.04 |
알고리즘 성능 평가 방법 - 빅오 표기법 (0) | 2024.02.06 |
자료구조와 알고리즘의 개념 (2) | 2024.02.06 |