[SQL]TIL 쉽고 빠른 SQL 5주차(24-04-18)

오정연(DATA_2기)·2024년 4월 17일

SQL

목록 보기
4/12

조회한 데이터에 아무 값이 없다면 어떻게 해야할까?

데이터 값에 null 값이 존재하는 경우

1. 없는 값을 제외 시켜준다.

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을 입력하라는 조건문

2. 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 값일때 나타나지 않도록 함.

SQL 로 Pivot Table 만들어보기

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

업무 시작을 단축시켜 주는 마법의 문법 (Window Function - RANK, SUM)

Rank

  • [실습1] N 번째까지의 대상을 조회하고 싶을 때,
    - Rank 는 이름에서 유추할 수 있듯이 ‘특정 기준으로 순위를 매겨주는’ 기능입니다.
    - 예를 들어, 주문 건수별 순위 매기기, 결제 시간이 빠른 순으로 순위 매기기 등이 가능합니다.
    - [실습] 음식 타입별로 주문 건수가 가장 많은 상점 3개씩 조회하기

    윈도우 함수의 기본구조는
    함수 () over >>>> 이 두개는 필수 조건이다
    그리고
    함수 () over (partition by 범주로 나눌것(어떤구분으로 나눌것인지) order by 순서)

sum

전체에서 차지하는 비율, 누적합을 구할 때, Sum

  • 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

날짜 포맷과 조건까지 SQL 로 한 번에 끝내기 (포맷 함수)

yyyy-mm-dd 형식의 컬럼을 date type 으로 변경하기

select date(date) date_type,
       date
from payments

date type 을 date_format 을 이용하여 년, 월, 일, 주 로 조회해보기

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함수(date형식으로바꿀열)

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

년월을 붙일 때!!

3월 조건으로 지정하고, 년도별로 정렬하기

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

HAVING 절

Where 절에서는 집계함수를 사용할 수가 없다.
그래서 having 절을 사용함.

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

profile
데이터 새내기

0개의 댓글