231213 / 데이터 분석 5주차 완강 및 예제 풀이
'실전 데이터 분석' 강의를 5주 차까지 완강했다. 마지막 강의에선 문제에 대한 가설을 직접 세워보고 데이터 분석을 통해 검증해 보았다. 데이터 분석 순서는 이제 익숙해졌는데 여러 요인이 복합적으로 작용한 결과를 만들 때는 코드가 좀 더 복잡해지고 어려워져서 한 번 더 복습하면서 이해해야 할 것 같다.
SQL 예제는 여러 문제를 풀어보면서 단순히 정답 코드를 맞추는 것이 아니라 문제를 분석하면서 여러 함수를 적용해 보고 결과 도출에 적절한 코드가 무엇인지 생각해 보게 되었다. 다른 함수를 적용하더라도 결괏값은 똑같이 나올 수 있으니 상황에 따라 더 간결하고 잘 맞는 코드를 찾는 것이 중요한 것 같다.
SQL 예제 풀이
44. PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 각각 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상~20,000원 미만인 구간의 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.
전체 테이블 값을 확인하니까 풀이에 용이하도록 모든 가격을 십만 원 미만으로 맞춰둔 것 같아서 SUBSTR을 이용해 가격대에 만 자리 숫자만 남긴 후 10,000을 곱하여 만원 단위의 가격대를 만들어주고 이를 그룹화하여 상품 개수를 COUNT 하는 코드를 작성했다.
정답 처리가 되긴 하였지만 이러한 방법은 십만 원대 이상의 상품이 존재하면 적용할 수 없어진다.
공부했던 함수 중에 적용할 수 있는 함수를 생각해 보며 다른 사람들의 정답을 보니 FLOOR 버림 함수를 이용한 것을 찾았다.
* floor(price/10000)*10000 이렇게 함수를 적용하면 십만 원 단위의 가격대도 구분이 가능해진다.
select substr(PRICE,1,1)*10000 PRICE_GROUP, count(*) PRODUCTS
from PRODUCT
group by 1
order by 1
46. CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해주세요.
리스트의 중복을 없애는 방법으로 GROUP BY문을 사용했는데 DISTINCT를 사용해도 중복값 제거가 가능하다.
* select distinct(c.CAR_ID)
select c.CAR_ID
from CAR_RENTAL_COMPANY_CAR c left join CAR_RENTAL_COMPANY_RENTAL_HISTORY h on c.CAR_ID=h.CAR_ID
where CAR_TYPE='세단' and month(START_DATE)=10
group by 1
order by 1 desc