在MariaDB中合并采购与销售数据表的月度统计查询需求
合并车辆采购与销售月度统计报表
可以通过左连接采购统计结果和销售统计结果,实现包含各月采购、销售数据的统一报表,同时处理有采购但无销售的场景。以下提供两种可行方案:
方案一:基于采购统计左连接销售统计
该方案会保留所有有采购记录的月份,无销售的月份销售数据将显示为0:
SELECT p.mes, p.importe_compra, p.cantidad_compra, COALESCE(s.importe_venta, 0) AS importe_venta, COALESCE(s.cantidad_venta, 0) AS cantidad_venta FROM ( -- 采购数据统计 SELECT MONTH(fecha_compra) mes, SUM(precio_compra) importe_compra, COUNT(*) cantidad_compra FROM vehiculo WHERE YEAR(fecha_compra) = '2024' GROUP BY MONTH(fecha_compra) ) p LEFT JOIN ( -- 销售数据统计 SELECT MONTH(fecha) mes, SUM(cotizacion) importe_venta, COUNT(*) cantidad_venta FROM propuesta WHERE estado = 'Vendido' AND YEAR(fecha) = '2024' GROUP BY MONTH(fecha) ) s ON p.mes = s.mes ORDER BY p.mes;
关键说明:
LEFT JOIN确保采购统计的所有月份都被保留,即使对应月份没有销售数据COALESCE函数将销售数据的NULL值转换为0,避免报表出现空值
方案二:基于完整月份列表关联双表统计
如果需要显示2024年所有12个月(哪怕该月既无采购也无销售),可以先生成1-12月的月份列表,再分别关联采购和销售统计:
WITH meses_2024 AS ( SELECT 1 AS mes UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 ) SELECT m.mes, COALESCE(p.importe_compra, 0) AS importe_compra, COALESCE(p.cantidad_compra, 0) AS cantidad_compra, COALESCE(s.importe_venta, 0) AS importe_venta, COALESCE(s.cantidad_venta, 0) AS cantidad_venta FROM meses_2024 m LEFT JOIN ( SELECT MONTH(fecha_compra) mes, SUM(precio_compra) importe_compra, COUNT(*) cantidad_compra FROM vehiculo WHERE YEAR(fecha_compra) = '2024' GROUP BY MONTH(fecha_compra) ) p ON m.mes = p.mes LEFT JOIN ( SELECT MONTH(fecha) mes, SUM(cotizacion) importe_venta, COUNT(*) cantidad_venta FROM propuesta WHERE estado = 'Vendido' AND YEAR(fecha) = '2024' GROUP BY MONTH(fecha) ) s ON m.mes = s.mes ORDER BY m.mes;
关键说明:
- 用CTE(
WITH子句)生成2024年的12个月份 - 两次
LEFT JOIN分别关联采购和销售统计,确保所有月份都能显示,无数据的字段用COALESCE转为0
内容的提问来源于stack exchange,提问作者pepqq
相关产品推荐
相关产品推荐

