내일배움캠프_데이터분석_2기/TIL

[TIL] camp_day2_240416

단ee 2024. 4. 16. 23:45

1주차 이틀차. 팀프로젝트는 팀원분들이 너무 방향을 잘 잡아주셔서 순조롭다.
다만 오늘은 컨디션이 좋지 않아서 하루 종일 힘들었다. 환절기 독감은 독해서 독감인가...

팀 프로젝트


* 어제 정의한 문제에 대해 각자 생각한 가설대로 분석을 시행했다.
* 나는 카테고리-상품에 따른 문제로 profit이 낮은 것이라 추측했는데, 만족스러울만큼 분석은 하지 못했다. 
일부는 카테고리에 따라 낮게 나타나고, 일부는 또 아니고... SQL로는 엑셀처럼 원하는 결과를 바로 나타내기가 아직은 어렵다. 
* DBeaver에서 테이블의 data type과 형식 변환하는 법을 몰라서 오래 걸렸지만 해결했다. 맞는 방법인지는 의문이다.
    * UPDATE 와 SET 구문 활용
    * 테이블의 Properties에서 컬럼명, data type 변경 가능

학습 내용


* Table UPDATE
    컬럼 중 주문일에 해당하는 Order Date가 dd-mm-yy 형식의 str 데이터로 저장되어 있어서 변환을 해야했다.                 
    
``` SQL UPDATE us -- 테이블명 SET `Order Date` = STR_TO_DATE(`Order Date`, '%d-%m-%y') ``` * 피벗테이블 형태로 가공하기 두 개 이상의 조건으로 정렬한 표가 필요할 때 - Sales 수치를 카테고리별로도 집계하지만 월별로도 집계해서 보고 싶었다. 하지만 숫자가 정리되어있지 않아서 결과 보기가 좋지 않았다. GPT한테 물어봤지만 일일이 ROUND 함수를 붙이는 방법만 알려줬다. 시간이 남으면 멘토님께 여쭤봐서 해결해야겠다. ``` SQL SELECT Category, Sub_Category ,sum(CASE WHEN MONTH(Order_Date)=1 THEN Sales ELSE NULL END) '1월' ,sum(CASE WHEN MONTH(Order_Date)=2 THEN Sales ELSE NULL END) '2월' ,sum(CASE WHEN MONTH(Order_Date)=3 THEN Sales ELSE NULL END) '3월' ,sum(CASE WHEN MONTH(Order_Date)=4 THEN Sales ELSE NULL END) '4월' ,sum(CASE WHEN MONTH(Order_Date)=5 THEN Sales ELSE NULL END) '5월' ,sum(CASE WHEN MONTH(Order_Date)=6 THEN Sales ELSE NULL END) '6월' ,sum(CASE WHEN MONTH(Order_Date)=7 THEN Sales ELSE NULL END) '7월' ,sum(CASE WHEN MONTH(Order_Date)=8 THEN Sales ELSE NULL END) '8월' ,sum(CASE WHEN MONTH(Order_Date)=9 THEN Sales ELSE NULL END) '9월' ,sum(CASE WHEN MONTH(Order_Date)=10 THEN Sales ELSE NULL END) '10월' ,sum(CASE WHEN MONTH(Order_Date)=11 THEN Sales ELSE NULL END) '11월' ,sum(CASE WHEN MONTH(Order_Date)=12 THEN Sales ELSE NULL END) '12월' FROM us GROUP BY 1, 2 ORDER BY 1, 2 DESC ```
* 순위 부여하기 윈도우 함수 `RANK()` 를 사용한다. GROUP BY 절 사용해서 집계하고 싶었는데 계속 오류가 발생. 내일 해결해서 조금 더 분석하는 데 활용하고 싶다. ``` SQL /*순위 부여하기*/ SELECT Category ,Sub_Category ,Sales ,RANK() OVER (PARTITION BY Sub_Category ORDER BY Sales Desc) AS ranking FROM us ``` * JOIN 중복 사용 * 프로그래머스 SQL 문제 : 취소되지 않은 진료 예약건 구하기 * JOIN을 여러번 쓸 수 있다니 새로웠다. ``` SQL SELECT a.APNT_NO, p.PT_NAME, a.PT_NO, a.MCDP_CD, d.DR_NAME, a.APNT_YMD FROM APPOINTMENT a JOIN DOCTOR d ON a.MDDR_ID=d.DR_ID JOIN PATIENT p ON a.PT_NO=p.PT_NO WHERE (DATE_FORMAT(a.APNT_YMD,"%Y-%m-%d") = '2022-04-13') AND (a.APNT_CNCL_YN = 'N') ORDER BY 6 asc ```

고찰 & 기타


* 다른 팀원분들이 분석적인 면에서 좋은 결론을 내고 계셔서 늦는 내가 좀 고민되긴 하지만, 천천히 쿼리 연습하면서 따라가야겠다.
* 조금 오랜만에 SQL과 파이썬 문제를 풀었는데 실수가 좀 있었다. 내일은 문제를 꼼꼼히 읽어야지.
* 오전에 튜터님, 매니저님이 SQL 쿼리문 작성할 때 팁을 주셨다. 그래서 오전에 작성한 쿼리(코테)랑 저녁에 작성한 쿼리가 다르고, 보다 정돈된 양식으로 작성할 수 있었다. 적절한 팁이었다.
* 본캠프 남은 기간 동안 절대 아프지 않도록 컨디션 관리 잘 해야겠다... 오늘 너무 힘들었다.

'내일배움캠프_데이터분석_2기 > TIL' 카테고리의 다른 글

[TIL] camp_day4_240418  (0) 2024.04.18
[TIL] camp_day3_240417  (0) 2024.04.17
[TIL] camp_day1_240415  (0) 2024.04.15
[TIL] precamp_day8_240327  (0) 2024.03.27
[TIL] precamp_day7  (0) 2024.03.26