4 주차
필요한 데이터가 서로 다른 테이블에 있을 때 조회하기 (JOIN)

join에는 두 가지 기능이 있으며 left와 inner 두 가지가 있다.

food_orders와 customers 테이블을 합쳐서 표기 하여 준다.

order_id의 공통으로 조인을 하고 필요한 컬럼은 조회

DISTINCT를 맨앞에 붙여줌으로 같은 이름에 같은 내용이 반복되어 있는 것들은 제거를 해준다.
JOIN으로 두 테이블의 값을 연산하기

각 테이블에서 필요한 값을 가지고 오고 각 테이블의 값을 연산하여 새로운 값을 만들어 낸다.

만들어서 계산하는 곳을 두 번 해야 하는데 순서를 잘 맞추어 주어야 한다.
만들다 보니 알게 된 것
GROUP BY = 그룹 짓기
|
ORDER BY = 순서대로
|
COUNT = 그룹 안에 횟수 세기
|
DESC = 역순으로 정렬하기
|
SUM = 그룹안에 총합 구하기
|
|
DISTINCT = 중복값 제거
|
|
AVG = 그룹안에 평균 값
|
|
각자 서로 잘사용 되는 명령어가 있다.

먼저 식당 별이기 때문에 식당이름으로 그룹화를 해주고
그룹이 된 곳에서 평균 값을 구해준 다음에
평균 금액에 맞추어 잘 생각해서 분류를 해준다.
5 주차
조회한 데이터에 아무 값이 없다면 어떻게 해야 할까?

notgive 같이 문자들은 0으로 대신해서 계산하기 때문에
null로 변경해 주어야지 합산이나 평균에 영향을 주지 않는다.

b.customer_id의 값 중에 null의 값이 있다면 빼도록 할 수 있다.

coalesce(b.age, 20) null의 값이 있다면 대체값을 넣어준다.

일정범위에 나이만 정해주고 싶을 때
SQL로 Pivot Table 만들어보기

max(if(hh='15', cnt_order, 0)) "15" 이 부문에 max값을 넣어주지 않으면 값이 이상하게 나오므로 알아둘

행이 나이 열이 성별이 되었다

반대로 행이 성별 열이 나이가 되었다

어느 부분에 무엇을 적어야 행이 되고 열이 되는지를 잘 기억해 두면 좋을 것 같다.
업무 시작을 단축시켜 주는 마법의 문법
(Window Function - RANK, SUM)

rank()와 over()는 항상 같이 따라다닌다.
rank로 새로운 칼럼은 생성해 준다고 알아두자

2. 파티션 설정을 해주면 각 음식점 안에서 순위를 나누어준다.

추가로 1,2,3위만 나오게 하기 위해서

SUM(cnt_order) OVER(PARTITION BY cuisine_type) sum_cu
= cuisine_type이 같다면 모든 카운트를 합하라
SUM(cnt_order) OVER(PARTITION BY cuisine_type ORDER BY cnt_order) cum_cu
= cuisine_type 이 같되 ORDER BY cnt_order로 작은 순서부터 누적으로 합산을 해서 가라 (숫자가 같다면 한 번에 계산)
날짜 포맷과 조건까지 SQL로 한 번에 끝내기 (포맷 함수)

1번은 날짜 데이터, 2번은 문자 데이터이다.

date_format을 이용해서 내가 필요한 것만 빼서 쓸 수 있다.

각 년도에 맞추어 3월만 필터링해서 카운트를 해준다.

나이에 맞는 음식 취향 조사

더욱 깔끔하게 가능하다.
'코딩 교육 TIL' 카테고리의 다른 글
2024-02-20 AI 코딩 TI (0) | 2024.02.20 |
---|---|
2024-02-19 AI 코딩 TIL (0) | 2024.02.19 |
2024-02-07 AI 코딩 TIL (0) | 2024.02.16 |
2024-02-06 AI 코딩 TIL (0) | 2024.02.16 |
2024-02-01 AI 코딩 TIL (0) | 2024.02.16 |