Mysql SQL 2表一个日期组和总和

Mysql SQL 2表一个日期组和总和,mysql,sql,Mysql,Sql,嗨,伙计,我需要一些帮助来制作我的图表 我有两张桌子“我会得到的钱”和“我付的钱” 3个字段(id、货币、日期) 获取图表数组的两个查询是: SELECT date_format(einnahmen.created_at, '%m') as pDate1, date_format(einnahmen.created_at, '%Y') as pDate2, date_format(einnahmen.created_at, '%m-%Y') as pDate3, sum(einnahmen.ei

嗨,伙计,我需要一些帮助来制作我的图表

我有两张桌子“我会得到的钱”和“我付的钱” 3个字段(id、货币、日期)

获取图表数组的两个查询是:

SELECT date_format(einnahmen.created_at, '%m') as pDate1, date_format(einnahmen.created_at, '%Y') as pDate2, date_format(einnahmen.created_at, '%m-%Y') as pDate3, sum(einnahmen.einnahmen) as pAmount FROM einnahmen GROUP BY pDate3 ORDER BY pDate2 ASC, pDate1 ASC

SELECT date_format(ausgaben.created_at, '%m') as pDate1, date_format(ausgaben.created_at, '%Y') as pDate2, date_format(ausgaben.created_at, '%m-%Y') as pDate3, sum(ausgaben.ausgaben) as pAmount FROM ausgaben GROUP BY pDate3 ORDER BY pDate2 ASC, pDate1 ASC
现在我坚持把这两者结合起来,结果应该是1-2,但格式相同,按月份和年份分组,并将月份相加

编辑(添加表结构和数据)

和表2

DROP TABLE IF EXISTS `einnahmen`;
CREATE TABLE `einnahmen`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `einnahmen` int(255) NOT NULL,
  `created_at` date NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 23 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Fixed;
INSERT INTO `einnahmen` VALUES (1, 0, '2017-05-01');
INSERT INTO `einnahmen` VALUES (2, 2850, '2017-06-01');
INSERT INTO `einnahmen` VALUES (3, 650, '2017-07-01');
INSERT INTO `einnahmen` VALUES (4, 0, '2017-08-01');
INSERT INTO `einnahmen` VALUES (5, 166, '2017-09-01');
INSERT INTO `einnahmen` VALUES (6, 990, '2017-10-01');
INSERT INTO `einnahmen` VALUES (7, 0, '2017-11-01');
INSERT INTO `einnahmen` VALUES (8, 0, '2017-12-01');
INSERT INTO `einnahmen` VALUES (9, 0, '2018-01-01');
INSERT INTO `einnahmen` VALUES (10, 0, '2018-02-01');
INSERT INTO `einnahmen` VALUES (11, 0, '2018-03-01');
INSERT INTO `einnahmen` VALUES (12, 0, '2018-04-01');
INSERT INTO `einnahmen` VALUES (13, 0, '2018-05-01');
INSERT INTO `einnahmen` VALUES (14, 6, '2018-06-01');
INSERT INTO `einnahmen` VALUES (15, 0, '2018-07-01');
INSERT INTO `einnahmen` VALUES (16, 0, '2018-08-01');
INSERT INTO `einnahmen` VALUES (17, 0, '2018-09-01');
INSERT INTO `einnahmen` VALUES (18, 4, '2018-10-01');
INSERT INTO `einnahmen` VALUES (19, 2, '2018-11-01');
INSERT INTO `einnahmen` VALUES (20, 1, '2018-12-01');
INSERT INTO `einnahmen` VALUES (21, 3000, '2017-10-02');


提前感谢

您可以尝试以下查询:

SELECT p.pDate1,p.pDate2,sum(p.pAmount)
FROM 
    ((SELECT date_format(einnahmen.created_at, '%m') as pDate1, 
       date_format(einnahmen.created_at, '%Y') as pDate2,
       date_format(einnahmen.created_at, '%m-%Y') as pDate3, 
       sum(einnahmen.einnahmen) as pAmount 
    FROM einnahmen GROUP BY pDate3 )    
UNION ALL    
    (SELECT date_format(ausgaben.created_at, '%m') as pDate1,
       date_format(ausgaben.created_at, '%Y') as pDate2, 
       date_format(ausgaben.created_at, '%m-%Y') as pDate3, 
       sum(-ausgaben.ausgaben) as pAmount 
    FROM ausgaben GROUP BY pDate3)) p
GROUP BY p.pDate2,p.pDate1    
ORDER BY p.pDate2 ASC, p.pDate1 ASC;

是不是像你要找的那样

编辑你的问题并显示示例数据和期望的结果。Thx但我收到消息“1248-每个派生表都必须有自己的别名”这意味着什么:)现在试试,我忘记了别名完美但我忘了一些东西,我不需要每个月的总和()。我需要每个月的“Einnahman”-“ausgaben”^^^好的,如果你把一个-in加起来(-ausgaben.ausgaben),你会得到一个负值,所以你会得到“Einnahman”-“ausgaben”。我已经修改了查询
select pdate1,pdate2,pdate3,pamount 
from(
    SELECT date_format(einnahmen.created_at, '%m') as pDate1, date_format(einnahmen.created_at, '%Y') as pDate2, date_format(einnahmen.created_at, '%m-%Y') as pDate3, sum(einnahmen.einnahmen)     as pAmount 
    FROM einnahmen GROUP BY pDate3 ORDER BY pDate2 ASC, pDate1 ASC) x
union all
select pdate1,pdate2,pdate3,pamount 
from(
   SELECT date_format(ausgaben.created_at, '%m') as pDate1,     
     date_format(ausgaben.created_at, '%Y') as pDate2, 
     date_format(ausgaben.created_at, '%m-%Y') as pDate3, sum(ausgaben.ausgaben) as pAmount 
   FROM ausgaben 
   GROUP BY pDate3 
   ORDER BY pDate2 ASC, pDate1 ASC)y
select * from 
(SELECT 
einnahmen.created_at,
date_format(einnahmen.created_at, '%m') as GETpDate1,
date_format(einnahmen.created_at, '%Y') as GETpDate2,
date_format(einnahmen.created_at, '%m-%Y') as GETpDate3,
sum(einnahmen.einnahmen)
over (partition by date_format(einnahmen.created_at, '%m-%Y') 
order by date_format(einnahmen.created_at, '%Y'),
date_format(einnahmen.created_at, '%m')) as GETpAmount
FROM einnahmen) as e
JOIN
(SELECT
ausgaben.created_at,
date_format(ausgaben.created_at, '%m') as PAYpDate1,
date_format(ausgaben.created_at, '%Y') as PAYpDate2,
date_format(ausgaben.created_at, '%m-%Y') as PAYpDate3,
sum(ausgaben.ausgaben) 
over (partition by date_format(ausgaben.created_at, '%m-%Y') 
order by date_format(ausgaben.created_at, '%Y'),
date_format(ausgaben.created_at, '%m')) as PAYpAmount
FROM ausgaben) as a
on a.ausgaben.created_at = e.einnahmen.created_at
select pdate1,pdate2,pdate3,pamount 
from(
    SELECT date_format(einnahmen.created_at, '%m') as pDate1, date_format(einnahmen.created_at, '%Y') as pDate2, date_format(einnahmen.created_at, '%m-%Y') as pDate3, sum(einnahmen.einnahmen)     as pAmount 
    FROM einnahmen GROUP BY pDate3 ORDER BY pDate2 ASC, pDate1 ASC) x
union all
select pdate1,pdate2,pdate3,pamount 
from(
   SELECT date_format(ausgaben.created_at, '%m') as pDate1,     
     date_format(ausgaben.created_at, '%Y') as pDate2, 
     date_format(ausgaben.created_at, '%m-%Y') as pDate3, sum(ausgaben.ausgaben) as pAmount 
   FROM ausgaben 
   GROUP BY pDate3 
   ORDER BY pDate2 ASC, pDate1 ASC)y