You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL两张生产表多条件统计合并生成视图表的实现方案咨询

实现方案

这个需求完全可以实现,核心思路是通过条件聚合分别统计两张表的指标,再按生产日期关联合并即可,相比单独跑三个统计查询性能更高。

实现步骤

  1. 聚合计算表1的每日总订单、皮革订单数:不用分开写两个查询,用条件计数一次算出两个指标
  2. 聚合计算表2的每日皮革类出入库数量:同样用条件计数分别统计入库、出库的总数
  3. 用production_date作为关联键,将两个聚合结果左连接,避免某张表当日无数据时结果缺失
  4. 过滤当日数据,并用IFNULL处理空值,最后计算结余字段

完整SQL代码(可直接创建视图)

CREATE VIEW daily_production_stats AS
SELECT
    t1.production_date,
    t1.total_order,
    t1.total_leather_order,
    IFNULL(t2.total_in, 0) AS total_in,
    IFNULL(t2.total_out, 0) AS total_out,
    (t1.total_leather_order - IFNULL(t2.total_out, 0)) AS balance
FROM (
    -- 统计表1的每日总订单、皮革订单数
    SELECT
        production_date,
        COUNT(*) AS total_order,
        SUM(IF(material = 'leather', 1, 0)) AS total_leather_order
    FROM table1
    GROUP BY production_date
) t1
LEFT JOIN (
    -- 统计表2的每日皮革类出入库数
    SELECT
        production_date,
        SUM(IF(prouction_status = 'in', 1, 0)) AS total_in,
        SUM(IF(prouction_status = 'out', 1, 0)) AS total_out
    FROM table2
    WHERE production_type = 'leather'
    GROUP BY production_date
) t2 ON t1.production_date = t2.production_date
-- 仅保留当日数据
WHERE t1.production_date = CURDATE();

注意事项

  • 你提供的表2字段prouction_status疑似拼写错误(正确应为production_status),如果实际表中字段名正确请自行修改
  • 用IFNULL处理表2的空值,避免当日没有皮革类完工数据时,出入库字段和结余计算出现NULL
  • 如果需要查所有历史日期的统计,删除最后的WHERE t1.production_date = CURDATE()条件即可

内容的提问来源于stack exchange,提问作者Ali Im

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 06:27:03