首頁 > 資料庫 > 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 匹配記錄柱子。這會將交易與空日期記錄合併,使我們能夠計算每天的總銷售額並顯示最近的交易和空行。

產生的查詢將有效地提供過去七次的全面概述銷售交易天數,佔沒有記錄活動的天數。

以下是完整的查詢供參考:

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板