ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 12/4
    스파르타/TIL(Today I Learned) 2023. 12. 4. 18:36

     

     

    문제 : 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
    SELECT car_id,
           CASE
               WHEN COUNT(
               	CASE WHEN end_date >= '2022-10-16' AND start_date <= '2022-10-16' THEN 1 END) > 0 THEN '대여중'
               ELSE '대여 가능'
           END AS AVAILABILITY
    FROM car_rental_company_rental_history
    GROUP BY car_id 
    ORDER BY car_id DESC;

    이 부분에서 가장 이해가 안된 부분은 바로 count를 써야 한다는 것이다.

    분명 문제에서의 조건을 내 머릿속으로 생각을 해본다면 

    굳이 count를 사용하지 않아도 될 것이라고 생각했기 때문이다.

     

    물론 나의 머리로 이해하기가 어려워서 질문하기 탭을 봐도 이해가 안되어서

    chat gpt에게 물어봤다.

     

    COUNT 함수가 없으면 우리는 대여 중인지 여부를 확인하기 위한 집계 함수가 없어집니다.
    COUNT 함수는 특정 조건을 만족하는 행의 개수를 세는 역할을 하며,
    이를 통해 대여 중인 자동차의 존재 여부를 파악합니다.
    만약 COUNT 함수를 사용하지 않고 단순히 CASE 문만 사용한다면, 그룹별로 대여 중인지 여부를 확인할 수 있는 특정 집계 함수가 없기 때문에 정확한 결과를 얻기 어려울 것입니다. COUNT 함수를 통해 대여 중인 행의 개수를 세고, 그 결과에 따라 '대여중' 또는 '대여 가능'을 결정하는 것이 이 쿼리의 핵심입니다.


    예를 들어, 특정 자동차가 2022년 10월 16일에 대여 중이라면 CASE 문에서는 1을 반환하고, 그렇지 않은 경우에는 NULL을 반환할 것입니다. 그리고 이렇게 반환된 값들을 COUNT 함수를 통해 모두 합산합니다. 만약 1이 하나라도 있다면, 그 자동차는 대여 중이라는 의미입니다.
    COUNT 함수는 NULL이 아닌 값들의 개수를 세는 역할을 합니다. 따라서 COUNT 함수를 사용하여 대여 중인 자동차의 개수를 세고, 그 결과에 따라 '대여중' 또는 '대여 가능'을 결정하는 것이 이 쿼리의 목적입니다

     

    사실 이렇게 말해줘도 아직 이해가 안되지만 

    노력은 하고있다...

    https://school.programmers.co.kr/learn/courses/30/lessons/157340

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

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

     

    -- 코드를 입력하세요
    SELECT year(b.sales_date) YEAR
        ,month(b.sales_date) MONTH
        ,a.gender GENDER
        ,count(distinct b.user_id) USERS
    from user_info a
    inner join online_sale b
        on a.user_id = b.user_id
    where a.gender is not null 
    group by 1,2,3
    order by 1,2,3

    여기서 중요한 부분은 

    count() 부분이다

    한 사람이 여러번의 구매가 가능하기 때문에

    distinct를 사용해서 user_id를 사용한다.

    https://school.programmers.co.kr/learn/courses/30/lessons/131532

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

    문제 : 자동차 대여 기록에서 장기/단기 대여 구분하기
    SELECT HISTORY_ID
        ,CAR_ID
        ,date_format(start_date,'%Y-%m-%d')START_DATE
        ,date_format(end_date,'%Y-%m-%d')END_DATE
        ,if(datediff(end_date,start_date) >= 29 ,"장기 대여","단기 대여")RENT_TYPE
    from car_rental_company_rental_history
    where date_format(start_date ,'%Y-%m') = '2022-09'
    order by 1 desc

     

    이게 문제 오류인지 모르겠는데

    if(datediff(end_date,start_date) >= 29 이 부분에서

    29를 30으로 하면 틀린 정답이고

    29로하면 정답이 된다.

    근데 머리로 이해가 안간다

    chat gpt도 30이 맞다고 하는데 

    문제 오류인걸까..?

    '스파르타 > TIL(Today I Learned)' 카테고리의 다른 글

    12/08  (0) 2023.12.08
    12/07  (2) 2023.12.07
    12/6  (3) 2023.12.06
    12/5  (0) 2023.12.05
    12/01  (1) 2023.12.01
Designed by Tistory.