好的,你需要使用LEFT JOIN语句将月份表连接到结果集中,这样即使没有数值也能显示月份。以下是更新后的三个SQL查询语句:

  1. 查询过去一年每个月的销售额:
SELECT 
    m.month,
    IFNULL(SUM(o.total), 0) AS sales_amount
FROM 
    (SELECT '01' AS month UNION SELECT '02' AS month UNION SELECT '03' AS month UNION SELECT '04' AS month UNION SELECT '05' AS month UNION SELECT '06' AS month UNION SELECT '07' AS month UNION SELECT '08' AS month UNION SELECT '09' AS month UNION SELECT '10' AS month UNION SELECT '11' AS month UNION SELECT '12' AS month) AS m
LEFT JOIN 
    orders o ON DATE_FORMAT(o.created_at, '%Y-%m') = m.month AND o.created_at BETWEEN DATE_SUB(NOW(), INTERVAL 1 YEAR) AND NOW()
GROUP BY 
    m.month;
  1. 查询过去一年每个月的卖出商品数:
SELECT 
    m.month,
    IFNULL(SUM(oi.quantity), 0) AS sold_items
FROM 
    (SELECT '01' AS month UNION SELECT '02' AS month UNION SELECT '03' AS month UNION SELECT '04' AS month UNION SELECT '05' AS month UNION SELECT '06' AS month UNION SELECT '07' AS month UNION SELECT '08' AS month UNION SELECT '09' AS month UNION SELECT '10' AS month UNION SELECT '11' AS month UNION SELECT '12' AS month) AS m
LEFT JOIN 
    orders o ON DATE_FORMAT(o.created_at, '%Y-%m') = m.month AND o.created_at BETWEEN DATE_SUB(NOW(), INTERVAL 1 YEAR) AND NOW()
INNER JOIN 
    order_items oi ON o.id = oi.order_id
GROUP BY 
    m.month;
  1. 查询过去一年每个月的新增用户数:
SELECT 
    m.month,
    IFNULL(COUNT(u.id), 0) AS new_users
FROM 
    (SELECT '01' AS month UNION SELECT '02' AS month UNION SELECT '03' AS month UNION SELECT '04' AS month UNION SELECT '05' AS month UNION SELECT '06' AS month UNION SELECT '07' AS month UNION SELECT '08' AS month UNION SELECT '09' AS month UNION SELECT '10' AS month UNION SELECT '11' AS month UNION SELECT '12' AS month) AS m
LEFT JOIN 
    users u ON DATE_FORMAT(u.created_at, '%Y-%m') = m.month AND u.created_at BETWEEN DATE_SUB(NOW(), INTERVAL 1 YEAR) AND NOW()
GROUP BY 
    m.month;
SQL查询:过去一年每个月销售额、卖出商品数和新增用户数(包含无数值月份)

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

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