본문 바로가기

DB/MySQL & MariaDB

[MySQL] 자동차 렌트 회사 테이블

원본 데이터

더보기
history_id car_id start_date end_date
506 15 2022-08-01 00:00:00 2022-08-02 00:00:00
507 26 2022-08-01 00:00:00 2022-11-09 00:00:00
508 27 2022-08-01 00:00:00 2022-08-02 00:00:00
510 29 2022-08-02 00:00:00 2022-08-05 00:00:00
511 13 2022-08-03 00:00:00 2022-08-07 00:00:00
512 27 2022-08-03 00:00:00 2022-08-04 00:00:00
513 28 2022-08-03 00:00:00 2022-08-03 00:00:00
517 2 2022-08-05 00:00:00 2022-08-07 00:00:00
518 5 2022-08-05 00:00:00 2022-08-08 00:00:00
519 23 2022-08-05 00:00:00 2022-08-06 00:00:00
520 25 2022-08-05 00:00:00 2022-08-07 00:00:00
521 27 2022-08-05 00:00:00 2022-08-06 00:00:00
523 7 2022-08-06 00:00:00 2022-08-08 00:00:00
524 8 2022-08-06 00:00:00 2022-08-06 00:00:00
527 8 2022-08-07 00:00:00 2022-08-11 00:00:00
528 19 2022-08-07 00:00:00 2022-09-16 00:00:00
529 28 2022-08-07 00:00:00 2022-08-21 00:00:00
530 29 2022-08-07 00:00:00 2022-08-11 00:00:00
531 23 2022-08-08 00:00:00 2022-08-21 00:00:00
532 25 2022-08-08 00:00:00 2022-08-09 00:00:00
534 2 2022-08-09 00:00:00 2022-08-09 00:00:00
535 5 2022-08-09 00:00:00 2022-08-09 00:00:00
536 27 2022-08-09 00:00:00 2022-08-16 00:00:00
537 2 2022-08-10 00:00:00 2022-08-20 00:00:00
538 5 2022-08-10 00:00:00 2022-08-10 00:00:00
539 9 2022-08-10 00:00:00 2022-08-10 00:00:00
540 15 2022-08-10 00:00:00 2022-09-19 00:00:00
542 25 2022-08-11 00:00:00 2022-08-12 00:00:00
545 5 2022-08-12 00:00:00 2022-09-21 00:00:00
546 8 2022-08-12 00:00:00 2022-08-13 00:00:00
547 13 2022-08-12 00:00:00 2022-08-14 00:00:00
548 16 2022-08-13 00:00:00 2022-08-13 00:00:00
549 29 2022-08-13 00:00:00 2022-08-13 00:00:00
551 7 2022-08-14 00:00:00 2022-08-15 00:00:00
552 25 2022-08-14 00:00:00 2022-08-14 00:00:00
556 8 2022-08-16 00:00:00 2022-08-23 00:00:00
558 6 2022-08-17 00:00:00 2022-09-21 00:00:00
559 13 2022-08-17 00:00:00 2022-08-19 00:00:00
560 16 2022-08-17 00:00:00 2022-11-15 00:00:00
561 25 2022-08-17 00:00:00 2022-08-27 00:00:00
562 9 2022-08-18 00:00:00 2022-08-20 00:00:00
564 7 2022-08-19 00:00:00 2022-08-22 00:00:00
567 10 2022-08-20 00:00:00 2022-08-21 00:00:00
568 2 2022-08-21 00:00:00 2022-08-23 00:00:00
569 29 2022-08-21 00:00:00 2022-11-29 00:00:00
571 9 2022-08-22 00:00:00 2022-10-01 00:00:00
573 7 2022-08-23 00:00:00 2022-09-22 00:00:00
574 13 2022-08-23 00:00:00 2022-08-24 00:00:00
575 2 2022-08-24 00:00:00 2022-08-28 00:00:00
576 27 2022-08-24 00:00:00 2022-09-23 00:00:00
577 10 2022-08-25 00:00:00 2022-08-26 00:00:00
578 23 2022-08-25 00:00:00 2022-09-01 00:00:00
579 28 2022-08-25 00:00:00 2022-09-08 00:00:00
581 8 2022-08-26 00:00:00 2022-08-27 00:00:00
582 10 2022-08-27 00:00:00 2022-08-29 00:00:00
583 13 2022-08-27 00:00:00 2022-09-06 00:00:00
586 8 2022-08-29 00:00:00 2022-08-30 00:00:00
587 11 2022-08-29 00:00:00 2022-08-29 00:00:00
591 8 2022-09-01 00:00:00 2022-09-11 00:00:00
592 10 2022-09-01 00:00:00 2022-09-02 00:00:00
593 25 2022-09-01 00:00:00 2022-09-03 00:00:00
594 12 2022-09-02 00:00:00 2022-09-15 00:00:00
595 10 2022-09-03 00:00:00 2022-09-18 00:00:00
596 11 2022-09-04 00:00:00 2022-09-04 00:00:00
597 23 2022-09-04 00:00:00 2022-09-07 00:00:00
601 2 2022-09-05 00:00:00 2022-10-05 00:00:00
602 20 2022-09-05 00:00:00 2022-09-06 00:00:00
603 18 2022-09-06 00:00:00 2022-09-07 00:00:00
604 22 2022-09-06 00:00:00 2022-09-06 00:00:00
605 25 2022-09-06 00:00:00 2022-09-09 00:00:00
606 22 2022-09-07 00:00:00 2022-12-06 00:00:00
607 24 2022-09-08 00:00:00 2022-09-11 00:00:00
609 18 2022-09-09 00:00:00 2022-09-12 00:00:00
610 20 2022-09-09 00:00:00 2022-09-12 00:00:00
611 13 2022-09-10 00:00:00 2022-09-11 00:00:00
613 4 2022-09-11 00:00:00 2022-10-21 00:00:00
614 28 2022-09-11 00:00:00 2022-09-12 00:00:00
615 11 2022-09-12 00:00:00 2022-09-13 00:00:00
616 25 2022-09-12 00:00:00 2022-09-14 00:00:00
618 8 2022-09-13 00:00:00 2022-09-14 00:00:00
619 18 2022-09-13 00:00:00 2022-09-15 00:00:00
620 28 2022-09-13 00:00:00 2022-12-22 00:00:00
621 11 2022-09-14 00:00:00 2022-09-16 00:00:00
622 13 2022-09-14 00:00:00 2022-09-21 00:00:00
623 20 2022-09-14 00:00:00 2022-09-15 00:00:00
624 24 2022-09-14 00:00:00 2022-09-14 00:00:00
626 23 2022-09-15 00:00:00 2022-09-16 00:00:00
627 8 2022-09-16 00:00:00 2022-09-16 00:00:00
628 12 2022-09-16 00:00:00 2022-09-18 00:00:00
629 18 2022-09-16 00:00:00 2022-10-16 00:00:00
630 20 2022-09-16 00:00:00 2022-10-16 00:00:00
631 8 2022-09-17 00:00:00 2022-09-19 00:00:00
632 11 2022-09-17 00:00:00 2022-09-18 00:00:00
634 19 2022-09-18 00:00:00 2022-09-20 00:00:00
635 24 2022-09-18 00:00:00 2022-10-28 00:00:00
637 11 2022-09-19 00:00:00 2022-09-19 00:00:00
638 15 2022-09-20 00:00:00 2022-09-23 00:00:00
639 25 2022-09-20 00:00:00 2022-09-21 00:00:00
640 8 2022-09-21 00:00:00 2022-09-24 00:00:00
641 12 2022-09-21 00:00:00 2022-09-23 00:00:00
642 19 2022-09-21 00:00:00 2022-09-23 00:00:00
645 10 2022-09-22 00:00:00 2022-09-23 00:00:00
646 23 2022-09-22 00:00:00 2022-09-24 00:00:00
648 5 2022-09-23 00:00:00 2022-11-02 00:00:00
649 7 2022-09-23 00:00:00 2022-10-06 00:00:00
650 13 2022-09-23 00:00:00 2022-09-24 00:00:00
653 6 2022-09-24 00:00:00 2022-10-24 00:00:00
654 12 2022-09-24 00:00:00 2022-09-25 00:00:00
656 10 2022-09-25 00:00:00 2022-09-25 00:00:00
657 11 2022-09-25 00:00:00 2023-01-03 00:00:00
658 21 2022-09-25 00:00:00 2022-09-26 00:00:00
659 25 2022-09-25 00:00:00 2022-09-27 00:00:00
660 27 2022-09-25 00:00:00 2022-12-24 00:00:00
663 15 2022-09-26 00:00:00 2022-09-26 00:00:00
664 19 2022-09-26 00:00:00 2022-10-03 00:00:00
665 23 2022-09-26 00:00:00 2022-10-06 00:00:00
667 10 2022-09-28 00:00:00 2022-10-12 00:00:00
668 13 2022-09-28 00:00:00 2022-09-28 00:00:00
669 25 2022-09-29 00:00:00 2022-10-28 00:00:00
671 15 2022-10-01 00:00:00 2022-10-14 00:00:00
672 21 2022-10-01 00:00:00 2022-10-01 00:00:00
673 8 2022-10-02 00:00:00 2022-10-04 00:00:00
674 17 2022-10-02 00:00:00 2022-11-06 00:00:00
675 9 2022-10-03 00:00:00 2023-01-04 00:00:00
676 12 2022-10-03 00:00:00 2022-10-06 00:00:00
678 19 2022-10-05 00:00:00 2022-11-14 00:00:00
679 13 2022-10-06 00:00:00 2022-10-06 00:00:00
680 8 2022-10-07 00:00:00 2022-10-21 00:00:00
681 12 2022-10-07 00:00:00 2022-11-16 00:00:00
682 21 2022-10-07 00:00:00 2022-10-09 00:00:00
685 2 2022-10-10 00:00:00 2023-01-11 00:00:00
687 7 2022-10-14 00:00:00 2022-11-23 00:00:00
688 13 2022-10-14 00:00:00 2022-10-15 00:00:00
689 23 2022-10-14 00:00:00 2022-10-27 00:00:00
691 21 2022-10-17 00:00:00 2022-10-17 00:00:00
692 10 2022-10-18 00:00:00 2022-10-18 00:00:00
694 18 2022-10-19 00:00:00 2022-10-19 00:00:00
695 21 2022-10-19 00:00:00 2022-10-26 00:00:00
697 10 2022-10-20 00:00:00 2022-10-23 00:00:00
699 3 2022-10-21 00:00:00 2022-10-24 00:00:00
700 18 2022-10-21 00:00:00 2022-10-22 00:00:00
701 20 2022-10-21 00:00:00 2022-10-23 00:00:00
702 15 2022-10-22 00:00:00 2022-11-06 00:00:00
704 4 2022-10-23 00:00:00 2022-10-26 00:00:00
705 8 2022-10-23 00:00:00 2022-10-23 00:00:00
706 13 2022-10-23 00:00:00 2022-10-26 00:00:00
707 10 2022-10-24 00:00:00 2023-01-25 00:00:00
710 6 2022-10-25 00:00:00 2022-10-28 00:00:00
711 8 2022-10-25 00:00:00 2022-10-25 00:00:00
712 18 2022-10-25 00:00:00 2023-01-26 00:00:00
713 3 2022-10-27 00:00:00 2022-10-28 00:00:00
714 8 2022-10-27 00:00:00 2022-11-06 00:00:00
715 13 2022-10-27 00:00:00 2022-10-27 00:00:00
716 30 2022-10-27 00:00:00 2022-10-27 00:00:00
718 13 2022-10-28 00:00:00 2022-10-30 00:00:00
720 6 2022-10-30 00:00:00 2022-11-02 00:00:00
721 21 2022-10-30 00:00:00 2022-11-02 00:00:00
722 1 2022-10-31 00:00:00 2022-11-30 00:00:00
723 4 2022-10-31 00:00:00 2022-11-01 00:00:00
724 20 2022-10-31 00:00:00 2022-12-10 00:00:00

 

 

[문제] CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
select t1.car_id,
if(t2.car_id is null, '대여 가능', '대여중') as AVAILABILITY
from CAR_RENTAL_COMPANY_RENTAL_HISTORY t1
left join
(select car_id from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where left(start_date, 10) <= '2022-10-16' and left(end_date, 10) >= '2022-10-16') as t2
on t1.car_id = t2.car_id
group by t1.car_id
order by t1.car_id desc

 

레프트 조인이 모든 것을 해결해 줄 지어니...처음에는 뭐야 그냥 대여중인지 아닌지만 표시해달라는건가ㅋ 했는데 잘 읽어보니 차량별로 현재(문제 기준 2022년 10월 16일) 대여가 가능한 상태인지 조회해 달라는 얘기. 여기서 '별로'라는 조사가 들어가면 group by가 자동으로 따라와야 한다. 

 

일단 지금 대여중인 차량을 조회해보자. order by는 본인 편의상 넣은 것이다. 

 

select car_id from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where left(start_date, 10) <= '2022-10-16' and left(end_date, 10) >= '2022-10-16'
order by car_id, start_date

 

위와 같이 조회하면 현재 대여중인 차량이 조회된다. 

 

여기서부터는 얘기가 쉬워진다. 그럼 위 테이블을 레프트 조인으로 붙인 담에 car_id가 빈값인 차량은 대여 가능 상태겠군?

물론 그냥 붙이면 안되고 원본 테이블을 한 번 걸러준다. 어떻게? '차량별로'이므로 차량이 종류대로 나올 수 있도록 group by 로 묶는다. 

 

select * from CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by car_id
728x90