mysql统计一个月每天、每月、月汇总的统计.

表结构如下:
CREATE TABLE tempTB(
tId INT NOT NULL,
tMoney0 DECIMAL(18,2),
tMoney1 DECIMAL(18,2),
tranDate VARCHAR(20)
);
插入的数据:
INSERT INTO tempTB VALUES (1,100,0.00,'2013-2-12');
INSERT INTO tempTB VALUES (2,120,0.00,'2013-2-12');
INSERT INTO tempTB VALUES (3,0.00,1000.00,'2013-2-13');
INSERT INTO tempTB VALUES (4,100,0.00,'2013-2-13');
INSERT INTO tempTB VALUES (5,150,0.00,'2013-2-13');
INSERT INTO tempTB VALUES (6,0.00,200.00,'2013-2-13');
INSERT INTO tempTB VALUES (7,100,0.00,'2013-2-14');
INSERT INTO tempTB VALUES (8,0.00,200.00,'2013-2-14');
INSERT INTO tempTB VALUES (9,100,0.00,'2013-2-14');
INSERT INTO tempTB VALUES (10,100,0.00,'2013-3-14');
INSERT INTO tempTB VALUES (11,100,0.00,'2013-3-14');
INSERT INTO tempTB VALUES (12,100,0.00,'2013-4-14');
INSERT INTO tempTB VALUES (13,100,0.00,'2013-4-14');
现在要实现的排序效果如下:

tMoney0     tMoney1 tranDate #注释
120     0          2013-2-12
100     0          2013-2-12
220     0          2013-2-12 2月12日汇总
150     0          2013-2-13
0    1000          2013-2-13
0     200          2013-2-13
100     0          2013-2-13
250     1200  2013-2-13 2月13日汇总
100     0          2013-2-14
100     0          2013-2-14
0     200          2013-2-14 2月14日汇总
200     200          2013-2-14 3月13日汇总
670     1400  2013-2-14 2月汇总
100      0          2013-3-14
100     0          2013-3-14
200     0          2013-3-14 3月14日汇总
200     0          2013-3-14 3月汇总
100     0          2013-4-14
100     0          2013-4-14
200     0          2013-4-14 4月14日汇总
200     0          2013-4-14 4月汇总
1070     1400         总汇总

#方法一

SELECT *
    FROM(
       SELECT tMoney0,tMoney1,tranDate,NULL AS remark
       FROM tempTB
       UNION ALL
SELECT SUM(tMoney0),SUM(tMoney1),tranDate ,CONCAT(tranDate,'日汇总')
       FROM tempTB
       GROUP BY tranDate
       UNION ALL
SELECT SUM(tMoney0),SUM(tMoney1),MAX(tranDate) ,CONCAT(DATE_FORMAT(tranDate,'%Y-%c'),'月汇总')
       FROM tempTB
       GROUP BY DATE_FORMAT(tranDate,'%Y-%m')
       UNION ALL
      SELECT SUM(tMoney0),SUM(tMoney1),NULL ,'总汇总'
       FROM tempTB
      ) t
ORDER BY tranDate IS NULL,tranDate,remark ;
      
#方法二      
SELECT *  FROM (
SELECT tMoney0,tMoney1,tranDate,NULL AS remark FROM tempTB 
UNION ALL
SELECT SUM(tMoney0),SUM(tMoney1),tranDate,CONCAT(tranDate,'日汇总') FROM tempTB GROUP BY tranDate  WITH ROLLUP 
UNION ALL
SELECT SUM(tMoney0),SUM(tMoney1),MAX(tranDate),CONCAT(DATE_FORMAT(tranDate,'%Y-%c'),'月汇总')  FROM tempTB GROUP BY DATE_FORMAT(tranDate,'%Y-%m') 
) AS t 
ORDER BY tranDate IS NULL,tranDate,remark;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值