MySQL은 날짜의 전체 목록을 제공하는 일 통계로 그룹화 달성 데이터가 자동으로 0을 기입하지 않습니다

비즈니스 요구
시스템에 새로 추가 될 통계 기능 요건 일해서 특정 날짜 범위 통계 데이터를 지정하고, 데이터의 양의 시간 동안 매일 볼 수있게한다.

솔루션은
직접 통계에 의한 데이터 테이블 날짜 필드 그룹에 데이터가 일일 경우, 날짜가 비즈니스 요구에 부합하지 않은, 존재하지 않는 것을 발견. 바이두는 일부 프로그램이 발견 기본적으로 두 가지 : 첫째, 날짜의 새 목록, 그들로 향후 10 년의 날짜를 만든 다음 쿼리를 조인으로 통계 이야기, 두 번째는 SQL 로직의 응용 프로그램 코드 이상의 연속 날짜 통합 쿼리이다. 그들은 더 복잡합니다.
오라클의 참조 "이중에서 선택 수준이 수준에 연결 <(31)는" 아이디어의 실현 :
첫 번째 질의 1, 날짜 지정된 날짜의 목록은 밖으로 밖으로 범위

SELECT  
    @cdate : = DATE_ADD ( @cdate 간격 -  1  하루 )  입니다 .END_ITEMEND_UNORDERED_LISTEND_PARAGRAPHSTART_PARAGRAPHSTART_BOLDDATE_STR, 0  date_count
 FROM ( SELECT  @cdate을 : = DATE_ADD (CURDATE () 간격 +  1  하루 ) 로부터 t_table1)를 T1을

2, 비즈니스 통계도 일 이상 문의 및 최신 통계에 문의 수는 별칭을 설정

SELECT 
    FROM_UNIXTIME (m.sdate, ' % Y- % M- % D ' )  입니다 .END_ITEMEND_UNORDERED_LISTEND_PARAGRAPHSTART_PARAGRAPHSTART_BOLDDATE_STR, 카운트 ( * ) date_count
 에서 t_table1 같이 m의
 그룹  으로 FROM_UNIXTIME (m.sdate, ' % Y- % M- % D ' )

3, 0을 채우기 위해 함께 왼쪽, 날짜가 아닌 번호로 연결된 두 개의 쿼리를 촬영

SELECT t1.date_str, 유착 (t2.date_total_count, 0 ) 으로 date_total_count
 FROM (
     SELECT  @cdate : = DATE_ADD ( @cdate 간격 -  1  하루 )  입니다 .END_ITEMEND_UNORDERED_LISTEND_PARAGRAPHSTART_PARAGRAPHSTART_BOLDDATE_STR FROM을 ( SELECT  @cdate을 : = DATE_ADD (CURDATE () 간격 +  1   ) 에서 t_table1) tmp1 WHERE  @cdate  >  ' 2018 - 12-01 ' 
)의 T1 
LEFT이  JOIN(
     SELECT , FROM_UNIXTIME (m.sdate를 ' % Y- % M- % D ' )  입니다 .END_ITEMEND_UNORDERED_LISTEND_PARAGRAPHSTART_PARAGRAPHSTART_BOLDDATE_STR, 카운트 ( * )  date_total_count FROM t_table1  m WHERE m.sdate 사이 XXXX  XXXXX GROUP  BY FROM_UNIXTIME (m.sdate, ' % Y- % M- % D ' ) 
) T2 
 t1.date_str = t2.date_str

결과는 다음과 같습니다 :

 

추천

출처www.cnblogs.com/rinack/p/11105779.html