카테고리 없음

[TIL11] 발표 / SQL 5주차 강의 / 문제 리뷰

LHJ_ 2024. 11. 29. 21:29

직무 분석 스터디 및 발표

느낀 점
여러가지 직무에 대해서 알 수 있어서 좋았음 (데이터 분석가, 데이터 사이언티스트, 데이터 엔지니어, CRM 마케터, 퍼포먼스 마케터, 그로스 마케터(해커), 비즈니스 분석가 등등)
직무에 대해서 알아봤지만 아직 무엇을 해야할지 모르겠음..
해당 도메인도 무엇을 선택해야할지 감도 잘 안 옴. 공부하면서 계속 도메인에 대해서 탐구 하는 시간을 가져야겠음. 모든 튜터님들을 찾아가서 도메인을 어떻게 정하게 됐는지 여쭤봐야겠음 

요즘 정신건강 관리에 사람들이 관심이 많아 자신의 생활을 루틴화하거나 감정을 데이터로 정리해 자신의 상태를 분석하는 것에 힘을 쓰던데 이걸 데이터 분석과 결합하면 많은 도움이 되지 않을까? (간단한 기분과 상태를 입력만 하면 자신이 느끼고 있는게 뭔지 카테고리에서 알려주는 걸 자동화 한다던가..) 라는 생각을 함 근데 어떻게 해야할지 모르겠음

발표 태도
정해진 시간 내에 발표를 마치는 것에 신경을 많이 써야겠음. 내용이 많아서 시간에 쫓기는 발표 보다는 정보량이 적어도 정확하고 여유롭게 하는 것에 중점을 두기
발표 전후 다른 사람 발표를 듣는 태도가 좋지 않았음. 전에는 긴장이 되어서 아무것도 집중이 안 됐고 끝난 후에는 진이 빠지고 힘들어서 딴짓을 하게 됨 체력 관리와 발표에 집중하는 태도를 가져야겠음 => 각 발표를 메모하며 들어보기)

 

SQL 강의 5주차

윈도우 함수로 누적합과 순위를 구할 수 있음

SELECT
FROM (
                    SELECT
                    FROM         )
과 같이 서브 쿼리를 FROM에 사용했을 때 전체 테이블이 서브 쿼리로 만든 테이블이 된다고 생각하기

date() > 데이터의 형태를 날짜 데이터로 바꿔줌
date_format > 날짜 유형의 데이터 형식을 지정    date _format( datetime, '  %원하는 형식  ' ) 

PATITION BY > 윈도우 함수에서 GROUP BY와 같은 역할을 함 (차이점이 뭐지)
RANK () OVER ( )<over은 뭐지?

('   '<문자열을 나타낼 때 사용 / '  ' 안에 있는 값은 컴퓨터에서 그 값을 이해하는 게 아닌 그대로 출력해줄 때 사용하는데, %를 사용하면 문자열 안에 있어도 %뒤에 온 값을 읽음)<맞는지 확인

 

문제 풀면서 궁금했던 점

select cuisine_type,
max(if(age=10, order_count, 0)) "10대",
max(if(age=20, order_count, 0)) "20대",
max(if(age=30, order_count, 0)) "30대",
max(if(age=40, order_count, 0)) "40대",
max(if(age=50, order_count, 0)) "50대"
from
(
select a.cuisine_type,
case when age between 10 and 19 then 10
when age between 20 and 29 then 20
when age between 30 and 39 then 30
when age between 40 and 49 then 40
when age between 50 and 59 then 50 end age,
count(1) order_count
from food_orders a inner join customers b on a.customer_id=b.customer_id
where age between 10 and 59
group by 1, 2
) t
group by 1;
SELECT cuisine_type,
SUM(IF(age BETWEEN 10 AND 19 , cnt, 0 )) `10` ,
SUM(IF(age BETWEEN 20 AND 29 , cnt, 0 )) `20` ,
SUM(IF(age BETWEEN 30 AND 39 , cnt, 0 )) `30` ,
SUM(IF(age BETWEEN 40 AND 49 , cnt, 0 )) `40` ,
SUM(IF(age BETWEEN 50 AND 59 , cnt, 0 )) `50`
FROM
(
SELECT f.cuisine_type, c.age, COUNT(*) cnt

FROM food_orders f INNER JOIN customers c ON f.customer_id = c.customer_id
WHERE age BETWEEN 10 AND 59
GROUP BY 1,2
) a

GROUP BY 1;
서브 쿼리에서 나이를 나이대 별로 구별한 뒤 그룹으로 묶어줬기 때문에 각 나이대에 모든 주문수가 이미 합쳐진 상태.
때문에 각 그룹의 가장 높은 값을 출력해주면 모든 주문건 수가 합쳐진 값 1개만 출력이 된다.
서브쿼리에서 그룹을 음식 타입과 나이로 묶어줬기 때문에
음식별 타입과 각 나이별로 그룹이 생김 

때문에 피봇을 만들기 위해 MAX()함수를 쓰면 위의 테이블에서
가장 나이가 많은 19세 값만 출력하기 때문에 모든 나이의 주문를
더해줘야(SUM()) 각 나이대 별 값을 알 수 있음