Today's Goals
1. SQL 쿼리 작성 익숙해지기 - 코드카타 레벨4
2. 파이썬 기억 돌려내 - 파이썬 강의
2. SQL로 데이터 기초 분석 하기(2주차_Team Project) - 발표
팀 과제라는 산을 넘었다...!
간만에 하는 팀플에 나는 우당탕탕 인간이 되었다.
나의 단점이기도 하지만, 항상 뭔가 프로젝트 같은걸 할 때, 그 때까지의 진도(?)에 맞는 정도만 한다는 것,,,
나의 모든걸 써서 다 보여줘야지..! 라는 열쩡은 어디서 훔쳐올 수 있을까ㅠㅠㅠㅠㅠ
사실 이번 프로젝트... 엑셀로 그래프 만들고 싶고, 파이썬으로 분석하고 싶은 마음 굴뚝이었지만,
나는 뭐 전생에 꼬장꼬장한 원칙주의자였는지 웨, 안, 해?
SQL 배우는 주였으니까 SQL만 써야쥥~ 하던 나를 반성하며 일주일 마무리 중
1. SQL 쿼리 작성 익숙해지기
코드카타 SQL
[문자값에도 MAX를 적용할 수 있다]
-- 나의 오답
SELECT CAR_ID,
IF("2022-10-16" BETWEEN START_DATE AND END_DATE,"대여중","대여 가능")
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY 1 DESC
-- MAX 사용
SELECT CAR_ID,
MAX(IF("2022-10-16" BETWEEN START_DATE AND END_DATE,"대여중","대여 가능"))
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY 1 DESC
-- 서브쿼리 사용
SELECT CAR_ID,
CASE WHEN CAR_ID IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '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;
- 왜 오답? 같은 자동차 ID 그룹에서 대여중과 대여가능이 혼재하기도 함(전체 대여 데이터에서 같은 자동차는 반복적으로 대여되기 때문)
- GROUP BY를 하면서 자동차 ID별로 제일 위에 있는 행을 그냥 반환해버리기 때문에 정확한 대여 가능 여부 표시 불가능
- MAX의 답이 맞는 이유는 뭘까? '대여중'과 '대여 가능'이라는 문자열에서 '중'이 ' '(공백)보다 사전순으로 더 크기 때문에 같은 그룹 내에서 하나라도 대여중이 있다면 그 값이 반환됨
- 좀 더 명확하고 확장성 있는 방법은 서브쿼리를 이용하는 것, 이 방법으로 익숙해지자
[DISTINCT 사용은 중요하다!]
SELECT YEAR(b.SALES_DATE) AS YEAR,
MONTH(b.SALES_DATE) AS MONTH,
a.GENDER,
COUNT(DISTINCT a.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 AND b.ONLINE_SALE_ID IS NOT NULL
GROUP BY YEAR(b.SALES_DATE), MONTH(b.SALES_DATE), a.GENDER
ORDER BY YEAR, MONTH, GENDER;
- 처음에 DISTINCT 없이 작성하여 오답!
- 여기서 DISTINCT가 필요한 이유는, user가 같은 달에 여러번 구매한 경우가 있기 때문, 고유한 구매자 수를 구하기 위해서는 중복 제거가 필요함
- 문제를 풀 때, 항상 해당 컬럼에 중복값이 있을지, 문제에서 원하는건 고유값인지 생각할 것
[DATEDIFF 함수에서 인자의 순서가 중요하다!]
- DATEDIFF는 괄호 안 두 날짜 사이의 간격을 의미하는게 아니고, 앞 날짜 빼기 뒤 날짜임
- 대여 일수를 구하고자 할 때, 오늘 빌리고 오늘 반납해도 대여일은 1일 이므로, 원하는 대여 일수를 조건으로 걸려면 'datediff+1 > 기준일자'을 해주거나 처음부터 -1을 한 값을 조건에 써주자
- 날짜를 세는 기준은 항상 신경쓰기!
2. 파이썬 기억 돌려내
파이썬 강의
[튜플과 리스트의 차이]
- 리스트는 []대괄호 안에 요소를 담고 있고, 각각의 요소를 변경할 수 있음(사과 > 배)
- 튜플은 ()괄호 안에 요소를 담고 있고, 요소를 바꿀수 없는 순서가 있는 불변형 자료임
[set, 파이썬에서 집합 만들기]
- set : 파이썬에서 하나의 리스트로 집합을 만들 수 있는 함수
- set() : []안의 요소들을 중복제거하여 하나의 집합으로 만듬
- set(리스트명 & 리스트명) : 교집합
- set(리스트명 | 리스트명) : 합집합
- set(리스트명 - 리스트명) : 차집합
'데이터 부트캠프 - Today I Learned' 카테고리의 다른 글
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_3주차_24.12.09 (2) | 2024.12.09 |
---|---|
[스파르타 내일배움캠프 / 데이터 분석 트랙] WIL(Weekly I Learned)_2주차 (0) | 2024.12.08 |
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_2주차_24.12.05 (2) | 2024.12.05 |
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_2주차_24.12.04 (0) | 2024.12.04 |
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_2주차_24.12.03 (0) | 2024.12.03 |