TIL

사전캠프 3일차

도원좀비 2025. 1. 22. 17:34

조회한 데이터에 아무 값이 없을 때

 

없는 값 제외하기

select name,
          avg(age) avg_age,
          avg(if(age<>'not given', age, null)) avg_age2
from users
group by 1

다음과 같은 쿼리로 사용 할 수 없는 값을 연산에서 제외 해준다. 또는

select 컬럼1, 컬럼2 .........
from 테이블1 a left join 테이블2 b a.id=b.id
where b.id is not null

where 조건절로 해결해준다.

select 컬럼1, 컬럼2 .........
           coalesce(컬럼, 조건)"null 제거"
from 테이블1 a left join 테이블2 b a.id=b.id
where b.id is not null

coalesce를 통하여 null값을 다른 값으로 채워 줄 수 있다.


상식적이지 않은 데이터 해결하기

 

조건문으로 범위 정하기

select customer_id, name, email, gender, age,
       case when age<15 then 15
            when age>80 then 80
            else age end "범위를 지정해준 age"
from customers

 

Pivot table

Pivot table : 2개 이상의 기준으로 데이터를 집계할 때 보기 쉽게 배열하여 보여주는 방식

pivot table의 기본 구조

  구분 컬럼
집계 기준 데이터

예시

select age,
       max(if(gender='male', order_count, 0)) male,
       max(if(gender='female', order_count, 0)) female
from 
(
select b.gender,
       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 b.age between 10 and 59
group by 1, 2
) t
group by 1
order by 1 desc

 

날짜 포맷과 조건(포맷 함수)

 

Y(4자리),y(2자리)
M,m
d,e
요일 w
select date(date) date_type,
       date_format(date(date), '%Y') "년",
       date_format(date(date), '%m') "월",
       date_format(date(date), '%d') "일",
       date_format(date(date), '%w') "요일"
from payments