AI: 好的,以下是更新后的SQL查询语句,用于查询从当前时间往前一年内每个月的销售额、卖出商品数和新增用户数,即使该月没有任何销售或新增也会被显示出来:

SELECT DATE_FORMAT(date_table.month, '%Y-%m') AS month, IFNULL(SUM(o.total), 0) AS sales_amount, IFNULL(SUM(oi.quantity), 0) AS sold_items, IFNULL(COUNT(u.id), 0) AS new_users FROM (SELECT DATE_FORMAT((CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) MONTH), '%Y-%m') AS month FROM (SELECT 0 AS a UNION SELECT 1 AS a UNION SELECT 2 AS a UNION SELECT 3 AS a UNION SELECT 4 AS a UNION SELECT 5 AS a UNION SELECT 6 AS a UNION SELECT 7 AS a UNION SELECT 8 AS a UNION SELECT 9 AS a) AS a CROSS JOIN (SELECT 0 AS a UNION SELECT 1 AS a UNION SELECT 2 AS a UNION SELECT 3 AS a UNION SELECT 4 AS a UNION SELECT 5 AS a UNION SELECT 6 AS a UNION SELECT 7 AS a UNION SELECT 8 AS a UNION SELECT 9 AS a) AS b CROSS JOIN (SELECT 0 AS a UNION SELECT 1 AS a UNION SELECT 2 AS a UNION SELECT 3 AS a UNION SELECT 4 AS a UNION SELECT 5 AS a UNION SELECT 6 AS a UNION SELECT 7 AS a UNION SELECT 8 AS a UNION SELECT 9 AS a) AS c) date_table LEFT JOIN orders o ON DATE_FORMAT(o.created_at, '%Y-%m') = date_table.month AND o.created_at BETWEEN DATE_SUB(NOW(), INTERVAL 1 YEAR) AND NOW() LEFT JOIN order_items oi ON o.id = oi.order_id LEFT JOIN users u ON DATE_FORMAT(u.created_at, '%Y-%m') = date_table.month AND u.created_at BETWEEN DATE_SUB(NOW(), INTERVAL 1 YEAR) AND NOW() GROUP BY month;


原文地址: https://www.cveoy.top/t/topic/ol3Q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录