On the journey of

[SolveSQL] 몇 분이서 오셨어요?, 일별 블로그 방문자 수 집계 본문

코딩테스트/SQL

[SolveSQL] 몇 분이서 오셨어요?, 일별 블로그 방문자 수 집계

dlrpskdi 2023. 6. 12. 15:09

1. 몇 분이서 오셨어요? - https://solvesql.com/problems/size-of-table/ 

 

solvesql

 

solvesql.com

Q. Waiter's Tips 데이터에는 레스토랑에서 근무한 웨이터가 서빙했던 테이블과 팁에 대한 정보가 들어있습니다. 서빙했던 테이블 중 고객이 홀수 명이었던 경우만 보여주는 쿼리를 작성해주세요.

쿼리 결과에는 모든 컬럼이 출력되어야 합니다. 테이블 당 일행의 수는 size 컬럼에 들어있습니다. 예를 들어, 5명이서 방문한 테이블의 경우 size 컬럼의 값이 5입니다.

 

A. 홀수의 특징: 2로 나누면 1이 남는다 - mod 함수를 활용해보자.

select *  ##모든 칼럼을 가져와야 하니까 명시 없이 *로 지정
from tips
where mod(size,2) = 1;

어렵지 않게 결과문 도출됨 !

 

2. 일별 블로그 방문자 수 집계 - https://solvesql.com/problems/blog-counter/

 

solvesql

 

solvesql.com

Q. ga 테이블에는 데이터리안 기술 블로그에 설치된 Google Analytics를 활용해 수집한 방문, 클릭 로그가 들어 있습니다.

2021년 8월 2일부터 2021년 8월 9일까지 날짜별로 몇 명의 방문자가 방문했는지 알고 싶습니다. 해당 일자 내 로그 테이블에 이벤트가 하나라도 기록 된 경우 방문자로 집계합니다. 기간 별 방문자 수를 일별로 추출하는 쿼리를 작성해주세요. 결과 데이터에는 아래 2개 컬럼(dt,users)이 들어가야하며, 방문일을 기준으로 오름차순 정렬되어있어야 합니다.

  • dt - 방문일
  • users - 방문자 수

A. 로그 기록에 null 있는지 검사할 필요가 있다(dt가 로그기록에서 파생되는 변수이므로). 이 경우엔 없었음! 그리고 SQLite문의 Where 조건문의 경우 2021.08.02~08.09면 Between '2021-08-02' AND '2021-08-09'(경계값 포함) 하면 됨 :) 이를 기반으로 작성해주면 아래와 같아진다. 

SELECT event_date_kst as dt
      ,COUNT(distinct user_pseudo_id) as users
FROM ga
WHERE event_date_kst BETWEEN '2021-08-02' AND '2021-08-09' 
GROUP BY event_date_kst

무난하게 도출! 난이도 보통이라서 왜인가 했는데, COUNT(distinct)와 Between 구문 때문이 아닐까 싶다.