從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中文網其他相關文章!