[mysql] 날자별 시간대 통계 0 4 3,266

by 한스네 [MySQL] 통계 [2021.01.21 14:09:51]


안녕하세요.

SQL 를 접한지 얼마 안되는 초보입니다.

날짜시간 데이터를 가지고 통계를 내고 있습니다.

각 입력 날짜마다 시간대별 통계를 구하고자 합니다.

아래와 같이 작성하면 월/일별 통계를 구하는데 데이터수를 구하는데, 여기에 각 날짜에 시간대별 데이터를 구하려고합니다.

한줄씩은 사용은 하겠는데, 한번에 같이 구하려면 어떻게 넣어야 하는지 궁금합니다.

입력된 데이터는 

2021-01-21 13:20:33  

위 처럼 되어 있습니다.

 

SELECT DATE_FORMAT(join_date,'%m-%d') AS 가입날자 , COUNT(*) FROM user GROUP BY 가입날자;

 

 

추가로... 검색하면서 하나씩 배우고 있는데 어떻게 배우는게 좋은지 조언도 같이 해주시면 감사하겠습니다.

by 마농 [2021.01.21 15:04:30]

1. 필요한 검색기간 조건 주기 WHERE
2. 집계 기준별 그룹핑 (년, 월, 일, 시 등으로 GROUP BY)
3. Group BY 에서의 별칭 사용은 표준이 아닙니다.(MySQL 에서만 허용되는 구문으로 표준 사용 권장)

-- 예1) 특정일자('2021-01-20')에 대한 시간(00~23시)별 통계 --
SELECT DATE_FORMAT(join_date,'%Y-%m-%d') AS 날짜
     , DATE_FORMAT(join_date,'%H') AS 시간
     , COUNT(*) 건수
  FROM user
 WHERE join_date >= '2021-01-20'
   AND join_date < DATE_ADD('2021-01-21', INTERVAL 1 DAY)
 GROUP BY DATE_FORMAT(join_date,'%Y-%m-%d')
        , DATE_FORMAT(join_date,'%H')
;
-- 예2) 특정월('2020-12')에 대한 일(01~31일)별 통계 --
SELECT DATE_FORMAT(join_date,'%Y-%m-%d') AS 날짜
     , COUNT(*) 건수
  FROM user
 WHERE join_date >= CONCAT('2020-12', '-01')
   AND join_date < DATE_ADD(CONCAT('2020-12', '-01'), INTERVAL 1 MONTH)
 GROUP BY DATE_FORMAT(join_date,'%Y-%m-%d')
;

 


by 한스네 [2021.01.21 15:21:19]

본래 요청한건 기간 설정부분은 없었는데, where 까지 적용해서 예제도 넣어주셨네요. 

배워야 할 코드를 하나 더 넣주셔서 감사합니다.

SELECT DATE_FORMAT(join_date,'%Y-%m-%d') AS 날짜
     , DATE_FORMAT(join_date,'%H') AS 시간
     , COUNT(*) 건수
  FROM user
 GROUP BY DATE_FORMAT(join_date,'%Y-%m-%d')
        , DATE_FORMAT(join_date,'%H')
;

 


by 마농 [2021.01.21 15:23:15]

Where 절이 없는게 더 이상합니다.
특정 기간을 검색하는게 일반적입니다.


by 한스네 [2021.01.21 15:36:19]

많이 쓰이는 방법은 잘 모르고 답만 도출하려다 보니 그렇게 되네요.

이어진 댓글 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입