MySQL에서 날짜 공백 채우기
MySQL에서 날짜 기반 쿼리로 작업할 때 데이터에 공백이 있는 상황이 발생할 수 있습니다. 특정 날짜에. 이는 데이터에 대한 포괄적인 보기를 제공하거나 전체 날짜 집합에 의존하는 계산을 수행하려는 경우 문제가 될 수 있습니다.
날짜 간격이 있는 쿼리:
이 문제를 설명하려면 다음 쿼리를 고려하십시오.
SELECT DATE(posted_at) AS date, COUNT(*) AS total, SUM(attitude = 'positive') AS positive, SUM(attitude = 'neutral') AS neutral, SUM(attitude = 'negative') AS negative FROM `messages` WHERE (`messages`.brand_id = 1) AND (`messages`.`spam` = 0 AND `messages`.`duplicate` = 0 AND `messages`.`ignore` = 0) GROUP BY date ORDER BY date
이 쿼리는 날짜별로 그룹화된 결과를 반환하고 총 개수와 태도 합계를 표시합니다. 날짜마다. 그러나 데이터가 없는 날짜가 있으면 결과에 포함되지 않으므로 데이터세트에 공백이 발생합니다.
공백 채우기:
채우려면 0과의 간격이 있는 경우 도우미 테이블을 활용하여 시작 날짜와 종료 날짜 사이의 완전한 날짜 집합을 생성할 수 있습니다. 헬퍼 테이블은 다음 쿼리를 사용하여 생성할 수 있습니다.
SELECT date AS dt FROM ( SELECT CURDATE() AS date UNION ALL SELECT date + INTERVAL 1 DAY FROM dates FROM dates WHERE date < DATE_ADD(CURDATE(), INTERVAL 1 YEAR) ) dates
이 쿼리는 미래의 1년이 될 때까지 현재 날짜에 1일을 재귀적으로 추가합니다.
다음 쿼리를 사용합니다. 도우미 테이블:
이제 LEFT JOIN을 사용하여 기본 쿼리로 도우미 테이블을 조인할 수 있습니다. 날짜 공백:
SELECT d.dt AS date, COUNT(*) AS total, SUM(attitude = 'positive') AS positive, SUM(attitude = 'neutral') AS neutral, SUM(attitude = 'negative') AS negative FROM dates d LEFT JOIN messages m ON m.posted_at >= d.dt AND m.posted_at < d.dt + INTERVAL 1 DAYS AND spam = 0 AND duplicate = 0 AND ignore = 0 GROUP BY d.dt ORDER BY d.dt
이 쿼리는 데이터가 없는 날짜를 포함하여 전체 날짜 집합을 반환하고 공백을 0으로 채웁니다.
위 내용은 MySQL 쿼리에서 날짜 공백을 메우는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!