[TIL] MySQL Practice Problems Part 3

03/24/23

·

1 min read

[TIL] MySQL Practice Problems Part 3

Practice Problems - Programmers Lv.3

Change string format by using CONCAT()

select 
    u.user_id, 
    u.nickname, 
    concat(u.city, ' ', u.street_address1, ' ', u.street_address2) as 전체주소, 
    concat(substring(tlno, 1, 3), '-', substring(tlno, 4, 4), '-', substring(tlno, 8, 4)) as 전화번호
from used_goods_board b
join used_goods_user u on b.writer_id = u.user_id
group by b.writer_id
having count(b.board_id) >= 3
order by u.user_id desc;

IF()

select 
    car_id,
    if(max(if(start_date <= '2022-10-16' and end_date >= '2022-10-16', 1, 0)) = 1, '대여중', '대여 가능') as availability
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by car_id
order by car_id desc

Tricky Problem

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요

with cars as (
    select car_id
    from car_rental_company_rental_history
    where date_format(start_date, '%Y-%m') between '2022-08' and '2022-10'
    group by car_id
    having count(*) >= 5
)

select month(start_date) month, car_id, count(*) records
from car_rental_company_rental_history
where date_format(start_date, '%Y-%m') between '2022-08' and '2022-10' and 
      car_id in (select car_id from cars)
group by month(start_date), car_id
having count(*) > 0
order by month, car_id desc