> 데이터 베이스 > MySQL 튜토리얼 > MySQL 범위에서 누락된 날짜를 0 값으로 채우는 방법은 무엇입니까?

MySQL 범위에서 누락된 날짜를 0 값으로 채우는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-23 16:47:09
원래의
600명이 탐색했습니다.

How to Fill Missing Dates in a MySQL Range with Zero Values?

MySQL 날짜 범위가 누락된 값을 채웁니다

두 개의 열(날짜 및 점수)이 있는 테이블이 있고 누락된 날짜를 채워 연속된 값 시퀀스를 얻으려고 한다고 가정합니다. 예를 들어, 테이블에 현재 다음 데이터가 포함되어 있는 경우:

<code>日期      分数
-----------------
2010-08-01  19
2010-08-02  21
2010-08-04  14
2010-08-07  10
2010-08-10  14</code>
로그인 후 복사

다음 결과를 얻기 위해 누락된 날짜(2010-08-03, 2010-08-05 및 2010-08-06)를 0으로 채우려고 합니다.

<code>日期      分数
-----------------
2010-08-01  19
2010-08-02  21
2010-08-03  0
2010-08-04  14
2010-08-05  0
2010-08-06  0
2010-08-07  10
2010-08-10  14</code>
로그인 후 복사

이를 달성하려면 다음 쿼리를 사용할 수 있습니다.

<code class="language-sql">SELECT x.ts AS timestamp,
       COALESCE(y.score, 0) AS cnt
FROM (SELECT DATE_ADD('2010-06-06', INTERVAL n.id - 1 DAY) AS ts
        FROM numbers n
       WHERE DATE_ADD('2010-06-06', INTERVAL n.id -1 DAY) < '2010-08-11') x
LEFT JOIN your_table y ON DATE(x.ts) = DATE(y.date);</code>
로그인 후 복사

다음은 검색어 분석입니다.

  • 자동으로 증가하는 값을 사용하여 숫자(숫자) 테이블을 만듭니다.
  • DATE_ADD를 사용하여 지정된 시작 날짜(예에서는 '2010-06-06')부터 날짜 목록을 구성하고 숫자 테이블에 있는 숫자의 ID를 기준으로 일 수를 늘립니다.
  • LEFT JOIN을 사용하여 날짜 부분을 기준으로 날짜 목록을 원래 테이블 y와 병합합니다.
  • COALESCE를 사용하여 y.score의 null 값을 0으로 바꿉니다.
  • 필요한 경우 DATE_FORMAT을 사용하여 날짜 형식을 변경할 수 있습니다.

your_table을 실제 테이블 이름으로 바꾸세요. 1부터 시작하는 연속 정수를 포함하는 numbers이라는 자동 증가 열이 포함된 id이라는 테이블이 있는지 확인하세요. 그렇지 않은 경우 먼저 하나를 만들어야 합니다. 예: CREATE TABLE numbers (id INT AUTO_INCREMENT PRIMARY KEY); 그런 다음 날짜 범위를 포함할 만큼 충분한 수의 레코드를 삽입합니다.

위 내용은 MySQL 범위에서 누락된 날짜를 0 값으로 채우는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿