> 데이터 베이스 > MySQL 튜토리얼 > 거래가 없는 날을 포함하여 MySQL 테이블에서 지난 7일 동안의 전체 판매 데이터를 검색하는 방법은 무엇입니까?

거래가 없는 날을 포함하여 MySQL 테이블에서 지난 7일 동안의 전체 판매 데이터를 검색하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-29 13:58:11
원래의
505명이 탐색했습니다.

How to Retrieve Complete Sales Data for the Last Seven Days from a MySQL Table, Including Days with No Transactions?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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