mysql 统计金额排序_MySQL,排序,统计行转列

这篇博客介绍了如何在MySQL中进行金额的统计和排序,包括使用SQL语句实现序号和排名,按类型和名称分组统计总金额,并将结果转换为行和列的形式展示。示例数据和多种行转列的方法被详细地展示和解析。
摘要由CSDN通过智能技术生成

标签:

20180110194522795537.png

-- ----------------------------

-- Table structure for a

-- ----------------------------

DROP TABLE IF EXISTS `a`;

CREATE TABLE `a` (

`type` varchar(255) DEFAULT NULL,

`name` varchar(255) DEFAULT NULL,

`val` varchar(255) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of a

-- ----------------------------

INSERT INTO `a` VALUES (‘x‘, ‘A‘, ‘1‘);

INSERT INTO `a` VALUES (‘x‘, ‘B‘, ‘2‘);

INSERT INTO `a` VALUES (‘x‘, ‘C‘, ‘2‘);

INSERT INTO `a` VALUES (‘x‘, ‘A‘, ‘4‘);

INSERT INTO `a` VALUES (‘y‘, ‘B‘, ‘5‘);

INSERT INTO `a` VALUES (‘y‘, ‘C‘, ‘5‘);

INSERT INTO `a` VALUES (‘y‘, ‘D‘, ‘5‘);

INSERT INTO `a` VALUES (‘z‘, ‘A‘, ‘8‘);

INSERT INTO `a` VALUES (‘z‘, ‘B‘, ‘9‘);

INSERT INTO `a` VALUES (‘x‘, ‘C‘, ‘1‘);

INSERT INTO `a` VALUES (‘x‘, ‘D‘, ‘2‘);

INSERT INTO `a` VALUES (‘y‘, ‘D‘, ‘3‘);

INSERT INTO `a` VALUES (‘y‘, ‘D‘, ‘4‘);

INSERT INTO `a` VALUES (‘z‘, ‘C‘, ‘5‘);

INSERT INTO `a` VALUES (‘z‘, ‘C‘, ‘6‘);

INSERT INTO `a` VALUES (‘z‘, ‘C‘, ‘2‘);

INSERT INTO `a` VALUES (‘z‘, ‘A‘, ‘4‘);

SQL语句

-- 序号、排名

select @rownum:=@rownum+1 xh,a.name,a.val,

if(@lastVal=a.val,@rank,@rank:=@rownum)pm,@lastVal:=a.val

from a,(select @rownum:=0,@rank:=0,@lastVal:=null) b ORDER BY a.val;

-- 统计为行

select type,name,sum(val) from a GROUP BY a.type,a.name;

-- 统计为行列

select t.type,if(t.name=‘A‘,t.sl,0)A,if(t.name=‘B‘,t.sl,0)B,if(t.name=‘C‘,t.sl,0)C,if(t.name=‘D‘,t.sl,0)D from

(select type,name,sum(val)sl from a GROUP BY a.type,a.name)t;

-- 行转列,方式1

select t1.type,sum(A) sumA,sum(B) sumB,sum(C) sumC,sum(D) sumD from

(select t.type,if(t.name=‘A‘,t.sl,0)A,if(t.name=‘B‘,t.sl,0)B,if(t.name=‘C‘,t.sl,0)C,if(t.name=‘D‘,t.sl,0)D from

(select type,name,sum(val)sl from a GROUP BY a.type,a.name)t)t1 group by t1.type;

-- 行转列,方式2

select t.type,sum(if(t.name=‘a‘,t.sl,0)) sumA,sum(if(t.name=‘b‘,t.sl,0)) sumB,sum(if(t.name=‘c‘,t.sl,0)) sumC,sum(if(t.name=‘d‘,t.sl,0)) sumD from

(select type,name,sum(val)sl from a GROUP BY a.type,a.name)t group by t.type;

结果图片

20180110194522810186.png

20180110194522827765.png

20180110194522892221.png

20180110194522911753.png

20180110194522937144.png

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值