카테고리 없음

내일배움캠프 데이터분석가_10기 7회차

note25140 2025. 10. 28. 15:09

▶ 학습내용

 

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 등 여러가지 문법을 적용하여 쿼리문을 작성 했고 데이터가 출력되었을때 조금은 성장 했구나 싶었고 꾸준히하면서 포기하지말자!