TIL_[Numpy/SQL] 시각화 그래프 팁 + 코딩테스트 회고를 통한 sql 문법 공부5

김희정·2023년 12월 14일

TIL

목록 보기
12/57
post-thumbnail

막대그래프 색 변경하기

#color ="색상"으로 바 색상을 지정 
plt.bar(X, Y,color='원하는 색상 컬러')

plt.bar(access_media.index,access_media.values, color = ['gold', 'b', '#FF0000', 'green','orange','red','#000000'], alpha = 0.3)
#alpha = 투명도를 조절 
# #hex나 rgb로도 색상 표현도 가능

막대그래프 테두리 변경하기

#edgecolor = '원하는 색상', linewidth = 원하는 두께로 각 바의 테두리의 색상과 두께 변경이 가능 합니다! 
plt.bar(access_media.index,access_media.values, color = ['gold', 'b', '#FF0000', 'green','orange','red','#000000'], alpha = 0.3,edgecolor = '원하는 색상', linewidth = 원하는 두께)

그래프 너비 변경하기

#width=원하는 두께로 그래프의 바 너비를 변경 할 수 있어요! 기본 값은 0.8입니다!
plt.bar(access_media.index,access_media.values, width=원하는 두께)

그래프 데이터 계열 나타내기

#그래프를 bar라는 변수에 넣고,
bar = plt.bar(access_media.index,access_media.values)
#for 반복문으로, 
for rect in bar:
		#각 바의 세로길이 값을 구하고, 
    height = rect.get_height()
		#bar의 가장 정 가운데 x 좌표 구하기 : get_x()로 x축의 가장 왼쪽 부분 + get_width의 절반 값
    plt.text(rect.get_x() + rect.get_width()/2.0, height, '%.1f' % height, ha='center', va='bottom', size = 12)

가로 그래프

#plt.barh를 이용하면, 서로 축 변경이 가능 하답니다 :)
plt.barh(access_media.index,access_media.values, color="g")

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

Q. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 
대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 
추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 
이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 
결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.

car_id 별 최신 값은 max 함수로 뽑자!

(정답)
SELECT CAR_ID, 
       max(case when '2022-10-16' between start_date and end_date then '대여중' else '대여 가능' end) as AVAILABILITY
FROM  CAR_RENTAL_COMPANY_RENTAL_HISTORY 
group by car_id
ORDER BY car_id desc

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

Q. USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 
결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 
이때, 성별 정보가 없는 경우 결과에서 제외해주세요.

이 문제는 혼자 생각해보려고 했으나, 전혀 모르겠어서 다른사람이 푼 정답을 확인해봤는데,
봐도 모르겠는 문제가 또 생겼다 😂
억지로 이해해보려고 하면 얼추 이해는 되나 문제를 보고 혼자서 다시 풀진 못할 것 같다.

(정답)
SELECT YEAR(SALES_DATE) AS YEAR, 
        MONTH(SALES_DATE) AS MONTH, 
        GENDER, 
        COUNT(DISTINCT(B.USER_ID)) AS USERS 
FROM USER_INFO A
JOIN ONLINE_SALE B
ON A.USER_ID = B.USER_ID 
WHERE A.GENDER IS NOT NULL
GROUP BY MONTH, GENDER 
ORDER BY 1,2,3

포인트는
1. gender 가 null인 걸 거를 것
2. user_id를 distinct로 카운트 할 것


자동차 대여 기록에서 장기/단기 대여 구분하기

Q. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 
대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 
대여기록을 출력하는 SQL문을 작성해주세요. 
결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

대여기간을 구하는데 이상한 점 발견했다.
처음에는 그냥 end_date - start_date 로 했었는데, 결과값이 이상하길래
따로 컬럼을 만들어서 뺄셈을 하고난 값을 출력해봤는데
ex) 2022.10.20 - 2022.09.01 => 숫자 20221020-20220901 을 뺀 값인 119가 나오는 것이었다.

찾아보니 날짜 간격을 계산해주는 함수가 따로 있었다.

Datediff(datepart, startdate, enddate)
  • datepart : 계산에 사용할 단위 지정.
    ex) year : 연도 간 차이 계산.
    month: 월 간 차이 계산
  • startdate : 시작 날짜/시간
  • enddate : 종료 날짜/시간
(정답)
SELECT history_id, car_id, 
    date_format(start_date, '%Y-%m-%d') "Start_date", 
    date_format(end_date, '%Y-%m-%d') "End_date",
   case when  DATEDIFF(end_date,start_date)+1 >=30 then '장기 대여'
else '단기 대여' end as RENT_TYPE
from car_rental_company_rental_history
where date_format(start_date, '%Y-%m') = '2022-09'
order by history_id desc
profile
데이터 애널리스트가 되고 싶은

0개의 댓글