▶ 학습내용
1. Group by 와 Having
group by 는 특정컬럼을 기준으로 데이터를 요약하여 비교하고 주로 사용하며 집계함수와 같이 쓰인다!
*group by + 집계함수 (SUM,MIN,MAX,AVG,COUNT)
*where절 뒤 group by 작성 해주며 where 생략가능
** 중요 **
group by와 집계함수를 같이 사용 할 때 group by 에 select 된 기준컬럼이 반드시 명시되어야 한다.
왜냐하면, 그룹화된 행 하나에 집계된 값이 출력 되는 것 이기때문에 기준컬럼이 있어야한다.
having은 그룹화된 행을 필터링하는 문법이다.
*where와 다른 점은 where는 그룹화되기 전 필터링이고, having 는 그룹화 된 후에 필터링이라는 점!!
*SQL 작동순서
from-on-join-where-group by- having-select-distinct-orderby
▶ 오늘문제
오답쿼리
select serverno,
case when first_login_date< 2024-01-01 then '기존유저'
else '신규유저' end as gb,
count(distinct game_actor_id) as actor_cnt,
avg(level) as avg_level
from basic.users
group by serverno, case when first_login_date< 2024-01-01 then '기존유저'
else '신규유저' end
-> 2024-01-01 이부분은 날짜로 문자열에 속하는데 작은따옴표 안에 있어야 문자열로 sql 이 인식 하기 때문에 작은 따옴표 필수!!
작은따옴표를 하지 않아서 숫자로 인식해서 정답쿼리와 다르게 데이터가 출력되었다 .
정답쿼리
select serverno,
case when first_login_date< '2024-01-01' then '기존유저'
else '신규유저' end as gb,
count(distinct game_actor_id) as actor_cnt,
avg(level) as avg_level
from basic.users
group by serverno, case when first_login_date< '2024-01-01' then '기존유저'
else '신규유저' end
▶문제해결 : 팀원과 같이 화면공유하면서 알게되었고 디테일을 놓치지 말고 확인 잘하기!
▶ 오늘 느낀점
sql 에서 데이터를 그룹화하고 필터링해서 요약하여 볼 수 있다는 점이 편리 한 것 같다. 능숙하게 할 수 있을때 까지 연습 많이 해보아야지!
▶오늘의 회고
실습문제를 풀어보며 case when 이나 having 등 여러가지 문법을 적용하여 쿼리문을 작성 했고 데이터가 출력되었을때 조금은 성장 했구나 싶었고 꾸준히하면서 포기하지말자!