mysql에서는 사용할 수 없는 값일 때 해당값을 연산에서 제외해 0으로 간주한다. 이럴경우에 평균값에 포함되어 정확한 평균값을 구하기 힘들수도 있다.
select restaurant_name,
avg(rating) average_of_rating,
avg(if(rating<>'Not given', rating, null)) average_of_rating2
from food_orders
group by 1
_이거처럼 not given 가 아니면 숫자데이터 / 아니면 null을 입력하라는 조건문
select a.order_id,
a.customer_id,
a.restaurant_name,
a.price,
b.name,
b.age,
b.gender
from food_orders a left join customers b on a.customer_id=b.customer_id
where b.customer_id is not null
[is not null] 을 사용하여 null 값일때 나타나지 않도록 함.

피벗 테이블로 만들려면
이 구문이 필요하다.
max (if( 열로 나올 열이름 = 비교값 , 카운트값 , 값이 아닐때값) )
이 구문이 피벗테이블로 만들어주는 것!!

윈도우 함수의 기본구조는
함수 () over >>>> 이 두개는 필수 조건이다
그리고
함수 () over (partition by 범주로 나눌것(어떤구분으로 나눌것인지) order by 순서)
전체에서 차지하는 비율, 누적합을 구할 때, Sum
select cuisine_type,
restaurant_name,
order_count,
sum(order_count) over (partition by cuisine_type) sum_cuisine_type,
sum(order_count) over (partition by cuisine_type order by order_count, restaurant_name) cumulative_sum
from
(
select cuisine_type, restaurant_name, count(1) order_count
from food_orders
group by 1, 2
) a
yyyy-mm-dd 형식의 컬럼을 date type 으로 변경하기
select date(date) date_type,
date
from payments
1. 년 : Y (4자리), y(2자리)
2. 월 : M, m
3. 일 : d, e
4. 요일 : w
select date_format(date(date), '%Y') y,
date_format(date(date), '%m') m,
order_id
from food_orders a inner join payments b on a.order_id=b.order_id
date함수(date형식으로바꿀열)

date_format >> 데이터형식의 열을 포맷팅을 해준다는 함수

년월을 붙일 때!!
select date_format(date(date), '%Y') y,
date_format(date(date), '%m') m,
count(1) order_count
from food_orders a inner join payments b on a.order_id=b.order_id
where date_format(date(date), '%m')='03'
group by 1, 2
order by 1
Where 절에서는 집계함수를 사용할 수가 없다.
그래서 having 절을 사용함.

오늘하루..
사실 5주차가 정말 힘들었었다. 왜냐면 배우는 내용도 상당하였고
정말 생소했던 함수나 이런 언어들이 많았어서
그래도 오늘 읽은 아티클 주제처럼
'어제보다 1cm 더 성장하자'라는 마음으로 다가올 내일을 생각해야지..