SQL 2表一个日期组和总和

时间:2017-10-11 14:05:47

标签: mysql sql

大家好我需要帮助我的图表。

我有两张桌子“我会得到的钱”和“我付的钱” 3字段(id,money,date)

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

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个但是采用相同的格式,按月和年分组并总结月份

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

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

和表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');

Query 1 Einnahmen

Query 2 Ausgaben

提前谢谢

3 个答案:

答案 0 :(得分:0)

您可以尝试此查询:

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;

答案 1 :(得分:-1)

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

是否有点像你在寻找

答案 2 :(得分:-1)

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