Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 显示来自不同不相关表的两个和_Mysql_Sql - Fatal编程技术网

Mysql 显示来自不同不相关表的两个和

Mysql 显示来自不同不相关表的两个和,mysql,sql,Mysql,Sql,我有两张桌子。一个包含费用,另一个包含收益。 我的学费: 我的收入: 从这两个表中,我想获得数据: 按月份和年份对期间进行分组 该期间的费用金额 该期间每天的平均费用 本期收益金额 我正在使用以下查询: SELECT DATE_FORMAT(my_costs.DATE, "%M-%Y") AS Period, SUM(my_costs.sum) AS Costs, ROUND(SUM(my_costs.sum)/DAY(LAST_DAY(my_costs.date)),

我有两张桌子。一个包含费用,另一个包含收益。 我的学费:

我的收入:

从这两个表中,我想获得数据:

  • 按月份和年份对期间进行分组
  • 该期间的费用金额
  • 该期间每天的平均费用
  • 本期收益金额
  • 我正在使用以下查询:

    SELECT DATE_FORMAT(my_costs.DATE, "%M-%Y") AS Period, SUM(my_costs.sum) AS Costs,
    ROUND(SUM(my_costs.sum)/DAY(LAST_DAY(my_costs.date)), 0) AS Average,
    
    SUM(my_earnings.sum)
    
    FROM my_costs
    
    LEFT JOIN my_earnings ON DATE_FORMAT(my_costs.DATE, "%M-%Y") = DATE_FORMAT(my_earnings.date, "%M-%Y")
    
    GROUP BY DATE_FORMAT(my_costs.DATE, "%M-%Y")
    ORDER BY Period DESC
    
    此请求成功地为我提供了期限、成本和收益。但所显示的收入数额是不正确的。这一数字远高于预期,每月不得超过10000人


    联接后聚合可能不准确,因为行重复或丢失。我建议使用
    union all
    ,然后聚合:

    SELECT DATE_FORMAT(ce.DATE, '%M-%M') AS Period,
           SUM(ce.costs) AS Costs, SUM(ce.Expenses) as expenses,
            ROUND(SUM(ce.sum)/DAY(LAST_DAY(ce.date)), 0) AS daily_Average
    FROM ((SELECT date, sum as costs, 0 as expenses
           FROM my_costs
          ) UNION ALL
          (SELECT date, 0, sum
           FROM my_earnings
          )
         ) ce
    GROUP BY period
    ORDER BY MIN(ce.DATE) DESC;
    

    请注意,我按更改了
    的顺序,因此结果是按时间顺序排列的。

    这里的大多数人希望示例表数据和预期结果是格式化文本,而不是图像。此外,请尝试更清楚地说明“不正确”。它大一点吗?更小这些信息可以指向错误,这对我来说是非常不寻常的语法。不幸的是,我自己没有发现你答案中的错误。执行结果: