T_era
[MySQL] 조회한 값 조절하기 본문
값의 제외
SQL에서는 avg, sum과 같은 연산을 할 때 연산할 수 없는 값이 있으면 0으로 간주한다
만약 데이터에 null이 있다면
where age is not null을 사용해 null을 제외할 수 있다
값의 변경
조건문을 사용해도 되지만 coalesce을 사용해 값을 변경해줄 수 있다
ex) coalesce(b.age, 20) "null 제거" // null을 20으로 대체한다
조회한 값이 예상 외의 값이 있을 때는 조건문을 이용하여 조정해줄 필요가 있다
pivot table
- 2개 이상의 기준으로 데이터를 집계할 때 보기 쉽게 배열해주는 것
- 2차원 배열을 생각하면 된다
- 사용할 때 반드시 max를 사용해 컬럼조회를 한다
ex)nation별로 shop의 이용자 연령대 pivot table로 표시
select
nation,
max(if(age = 10, cnt, 0)) as "10대",
max(if(age = 20, cnt, 0)) as "20대",
max(if(age = 30, cnt, 0)) as "30대",
max(if(age = 40, cnt, 0)) as "40대",
max(if(age = 50, cnt, 0)) as "50대"
from
(select
h.nation,
case
when h.age between 10 and 19 then 10
when h.age between 20 and 29 then 20
when h.age between 30 and 39 then 30
when h.age between 40 and 49 then 40
when h.age between 50 and 59 then 50
else 60
end as age,
count(1) cnt
from human as h inner join shop as s on h.index = s.index
group by 1, 2
) a
group by 1
window function
- 행의 관계를 정의해주기 위한 함수
RANK
ex) 랭킹을 구해주는 함수 // 나이가 전체인원수에서 해당 나이가 몇명씩 있는지 확인하고 랭킹화시킨다
rank() over (partition by age order by count(name) desc) as ranking,
SUM
ex) 누적합 구하기
sum(count(age)) over(partition by age order by count(age) ) as cum_age
- 나이순으로 정렬하되 겹치는 등 수가 생기면 같이 값을 누적함
- 1등이 10살 11살 둘다 3명씩이면 1등이 3명씩있는 10살과 11살이 되고 누적합은 6이 된다
날짜 데이터
date(날짜컬럼): 사용방법
date_format(date(date), '%Y') "년" : %Y 형태의 값으로 출력
날짜 데이터 포맷
%Y : 년
%m : 월
%d : 일
%w : 요일
'Programing > Datababse' 카테고리의 다른 글
| [MySQL] 문제풀이 : 이제 좀 벌었으니 flex 한 번 해볼까요?! (5) | 2025.03.21 |
|---|---|
| [MySQL] 문제풀이 : 돈을 벌기 위해 일을 합시다! (0) | 2025.03.21 |
| [MySQL] SubQuery와 Join (0) | 2025.03.21 |
| [MySQL] 조건문 사용하기 (1) | 2025.03.21 |
| [MySQL] SQL문을 원하는 대로 가공해서 출력하기 (0) | 2025.03.20 |