【问题标题】:Mysql sum column different 3 tablesMysql求和列不同3表
【发布时间】:2016-08-04 07:02:15
【问题描述】:
资金表 -------------------------- source_id、金额、日期、 -------------------------- 1, 1000, 2016-01-15 2, 2000, 2016-02-28 ca_table -------------------------- ca_id,source_id,金额 -------------------------- c1 , 1, 500 c2 , 1, 500 c3, 2, 900 c4, 2, 1100 exp_table -------------------------- exp_id, ca_id, 金额, -------------------------- e1, c1, 0 e2, c1, 250 e3、c2、500 e4、c3、500 e5、c4、600 e6、c4、500

我想对 select MONTHNAME(date) ,sum(funds_table.amount**) ,sum(ca_table.amount),sum(exp_table .金额) 互相加入 其中 年份(日期)= 2016按月(日期)分组

预期输出

-------------------------------------------------- --------------------- MonthName(日期),sum(source_id.amount),sum(ca_id.amount),sum(exp_id.amount) -------------------------------------------------- --------------------- 一月, 1000, 1000, 750 2000 年 2 月、2000 年、1100 年

3天搜索结果,但我无法得到确切的结果。

【问题讨论】:

  • 你尝试了什么,你的问题在哪里?
  • 我希望最后一张表是结果

标签: php mysql sql database sqlite


【解决方案1】:

我没有你的桌子,但我认为这对你有帮助

SELECT DATE_FORMAT(funds_table.date,"%M") AS month,SUM(ca_table.amount) AS ca_table_amount,SUM(exp_table.amount) AS exp_table_amount,month,SUM(funds_table.amount) AS funds_table_amount FROM `funds_table` INNER JOIN ca_table
ON funds_table.source_id=ca_table.source_id
INNER JOIN exp_table
ON ca_table.ca_id=exp_table.ca_id
GROUP BY month

【讨论】:

    【解决方案2】:

    不像最初看起来那么容易 - 请注意联合以适应通过 ca_table 到 exp_table 的连接

    /*
    create table funds_table (source_id int, amount int, dte date)  ;
    insert into funds_table values
    (1,  1000, '2016-01-15'),
    (2,  2000, '2016-02-28');
    
    create table ca_table (ca_id varchar(2),source_id int, amount int);
    insert into ca_table values
    ('c1'   ,        1,  500),
    ('c2'   ,        1,  500),
    ('c3'   ,        2,  900),
    ('c4'   ,        2,  1100);
    
    create table exp_table(exp_id varchar(2), ca_id varchar(2), amount int);
    insert into exp_table values
    ('e1',        'c1',    0),
    ('e2',        'c1',    250),
    ('e3',        'c2',    500),
    ('e4',        'c3',    500),
    ('e5',        'c4',    600),
    ('e6',        'c4',    500);
    */
    
    select  month,sum(ftamt) ftamt,sum(caamt) caamt,sum(eamt) eamt
    from
    (
    select    month(ft.dte) month,sum(ft.amount) as ftamt, ca.caamt, 0 as eamt
    from        funds_table ft
    join        (select ca.source_id ,sum(ca.amount) caamt from ca_table ca group by ca.source_id) ca on ca.source_id = ft.source_id
    group       by month(ft.dte)
    union
    select  month(ft.dte), 0,0, sum(e.amount)
    from        funds_table ft
    join        ca_table ca on ca.source_id = ft.source_id
    join        exp_table e on e.ca_id = ca.ca_id
    group       by  month(ft.dte)
    ) s
    group   by month
    

    结果

    +-------+-------+-------+------+
    | month | ftamt | caamt | eamt |
    +-------+-------+-------+------+
    |     1 |  1000 |  1000 |  750 |
    |     2 |  2000 |  2000 | 1600 |
    +-------+-------+-------+------+
    

    【讨论】:

    • 我会尝试,我认为它会运行谢谢!我会尽快回复
    猜你喜欢
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2015-06-23
    • 2013-01-26
    • 1970-01-01
    相关资源
    最近更新 更多