MySQL 단일 테이블에서 포괄적인 데이터 검색: 빈 행 및 최근 트랜잭션 처리
이 토론에서 우리는 공통적인 과제를 해결하는 것을 목표로 합니다. 데이터베이스를 쿼리할 때 직면하는 문제: 최근 트랜잭션과 비어 있는 날짜를 모두 결과에 통합하는 방법입니다. 구체적으로, 활동이 없는 날에 대한 빈 행을 포함하면서 지난 7일간의 판매 거래를 검색하는 데 중점을 둘 것입니다.
시작하려면 COALESCE() 함수의 기능을 활용하여 대체할 수 있습니다. 표현식이 NULL로 평가되는 경우 기본값입니다. 이 경우 빈 행의 기본값으로 0을 사용합니다.
그런 다음 지난 7일 동안의 날짜에 대한 포괄적인 목록을 생성하는 하위 쿼리를 생성합니다. 이는 완전한 결과 세트의 기초 역할을 하여 빈 행이 포함되도록 합니다.
마지막으로 생성된 날짜 목록과 거래 테이블 간에 LEFT JOIN 작업을 수행하여 PURCHASE_DATE를 기준으로 레코드를 일치시킵니다. 열. 이렇게 하면 거래가 빈 날짜 기록과 병합되어 일별 총 판매액을 계산하고 최근 거래와 빈 행을 모두 표시할 수 있습니다.
결과 쿼리는 지난 7일에 대한 포괄적인 개요를 효과적으로 제공합니다. 판매 거래 일수, 기록된 활동이 없는 일수를 계산합니다.
참조용 전체 쿼리는 다음과 같습니다.
SELECT t1.purchase_date, COALESCE(SUM(t1.amount + t2.amount), 0) AS amount FROM ( SELECT DATE_FORMAT(a.Date,'%Y-%m-%d') AS purchase_date, '0' AS amount FROM ( SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c ) a WHERE a.Date BETWEEN NOW() - INTERVAL 7 DAY AND NOW() ) t1 LEFT JOIN ( SELECT DATE_FORMAT(purchase_date, '%Y-%m-%d') AS purchase_date, COALESCE(SUM(amount), 0) AS amount FROM transactions WHERE purchase_date BETWEEN NOW() - INTERVAL 7 DAY AND NOW() GROUP BY purchase_date ) t2 ON t2.purchase_date = t1.purchase_date GROUP BY t1.purchase_date ORDER BY t1.purchase_date DESC;
위 내용은 거래가 없는 날을 포함하여 MySQL 테이블에서 지난 7일 동안의 전체 판매 데이터를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!