내일배움캠프/TIL

[TIL]2412209_코드카타, 파이선 종합반 강의

dydatablog 2024. 12. 9. 15:06

코드카타

 

56. 특정 옵션이 포함된 자동차 리스트 구하기

SELECT CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS
FROM CAR_RENTAL_COMPANY_CAR
WHERE options LIKE '%네비게이션%'
ORDER BY car_id DESC;

 

57. 조건에 부합하는 중고거래 상태 조회하기

SELECT BOARD_ID, WRITER_ID, TITLE, PRICE, 
    CASE WHEN status = 'SALE' THEN '판매중'
        WHEN status = 'RESERVED' THEN '예약중'
        WHEN status = 'DONE' THEN '거래완료'
        END AS STATUS
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC;

 

58. 취소되지 않은 진료 예약 조회하기

SELECT a.APNT_NO,
    p.PT_NAME, p.PT_NO, d.MCDP_CD, d.DR_NAME, a.APNT_YMD
FROM patient p
LEFT JOIN appointment a ON p.pt_no = a.pt_no
LEFT JOIN doctor d ON a.MDDR_ID = d.DR_ID
WHERE APNT_YMD LIKE '2022-04-13%' 
AND d.MCDP_CD = 'CS'
AND A.APNT_CNCL_YN = 'N'
ORDER BY a.APNT_YMD;

 

 

59. 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

각 자동차는 여러 번 대여될 수 있기 때문에 CAR_ID를 기준으로 그룹화하여 각 자동차에 대한 여러 기록을 하나로 묶어야한다.

SELECT절에서 집계함수 MAX()안에 연산자를 넣게 되면 해당 연산이 참값이라면 1을 출력하고 거짓이라면 0을 출력한다.

같은 car_id 중에서 한 개의 기록이라도 2022년 10월 16일에 대여 중이라면, 그 조건은 참(True)이 되고, '대여중'으로 표시한다.

-- 중간과정
SELECT car_id,
    MAX('2022-10-16' BETWEEN start_date AND end_date),
    start_date,
    end_date
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY car_id
ORDER BY car_id

중간과정 쿼리 실행 결과

-> 2022년 10월 16일에 대여 중인 CAR_ID는 1로 출력되고 대여 가능인 값은 0으로 출력

-- 정답
SELECT CAR_ID
     , CASE WHEN MAX('2022-10-16' BETWEEN START_DATE AND END_DATE) = 1 THEN '대여중'
     	-- START_DATE와 END_DATE 사이에 2022/10/16 이 포함되면 1 아니면 0
        -- group by로 묶었기 때문에 같은 car_id 중에 하나라도 대여중(1)인 값이 있는 것을 찾아야하기 때문에 MAX를 이용하여 최댓값을 반환
        ELSE '대여 가능'
        END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;

 

 

 

60. 년, 월, 성별 별 상품 구매 회원 수 구하기

-- 오답 쿼리
SELECT DATE_FORMAT(sales_date,'%Y') YEAR,
    DATE_FORMAT(sales_date,'%m') MONTH,
    GENDER,
    count(os.user_id) USER
FROM USER_INFO ui JOIN ONLINE_SALE os ON ui.user_id = os.user_id 
WHERE gender IS NOT NULL
GROUP BY DATE_FORMAT(sales_date,'%m'), gender
ORDER BY DATE_FORMAT(sales_date,'%m'), gender;

실행결과

-> MONTH 부분이 1, 2, 3이 아니라 01, 02, 03으로 나와버림 + user_id 중복값 제거를 안해서 합계수에 차이가 있음

 

-- 정답 쿼리
SELECT 
    YEAR(os.sales_date) AS YEAR, -- 형식 맞춤
    MONTH(os.sales_date) AS MONTH, -- 형식 맞춤
    ui.GENDER,
    COUNT(DISTINCT ui.USER_ID) AS USERS -- 중복되는 아이디 제거
FROM USER_INFO ui JOIN ONLINE_SALE os ON ui.user_id = os.user_id 
WHERE gender IS NOT NULL
GROUP BY DATE_FORMAT(sales_date,'%m'), gender
ORDER BY DATE_FORMAT(sales_date,'%m'), gender;

정답 쿼리 실행 결과


파이선 종합반 1,2주차 수강

https://dydatablog.tistory.com/56

 

[Python]리스트의 슬라이싱, 정렬

리스트(List)란? : 여러 항목들을 담을 수 있는 가변(mutable)한 시퀀스(sequence)이다. 대괄호 "[ ]" 를 사용하여 리스트를 만들 수 있다. 리스트의 인덱싱(Indexing)인덱싱: 리스트에서 특정 위치의 값에

dydatablog.tistory.com