按月份分组统计不同订单平均商品件数的SQL查询实现问题
SQL实现方案
计算逻辑
- 核心逻辑:单月平均每个订单的商品数 = 单月总符合条件的商品条目数 ÷ 单月总符合条件的去重订单数
- 分组维度:提取
start_picking_at字段的年月值作为分组依据,可根据你使用的数据库调整年月格式化函数
完整可运行代码
SELECT -- 年月格式化,不同数据库替换对应函数: -- MySQL: DATE_FORMAT(o.start_picking_at, '%b-%Y') -- PostgreSQL: TO_CHAR(o.start_picking_at, 'Mon-YYYY') -- 若需要数字格式月份如2020-05,调整格式参数为'%Y-%m'(MySQL)或'YYYY-MM'(PostgreSQL) DATE_FORMAT(o.start_picking_at, '%b-%Y') AS statistical_month, ROUND(COUNT(i.id) / COUNT(DISTINCT o.id), 2) AS avg_items_per_order FROM orders o INNER JOIN order_items i ON o.id = i.order_id WHERE i.product_id NOT IN ('wpp001', '147426') AND DATE(o.start_picking_at) BETWEEN {{data_inicial}} AND {{data_final}} GROUP BY statistical_month ORDER BY statistical_month;
结果验证说明
你给出的示例数据中:
- may-2020总商品数6,总订单数3,计算结果为2,你示例中写的5.33为笔误
- june-2020总商品数3,总订单数2,计算结果为1.5,和你给出的示例结果一致
内容的提问来源于stack exchange,提问作者gqmonteiro
相关产品推荐
相关产品推荐

