-- ----------------------------
-- 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;

 结果图片

MySQL,排序,统计行转列的更多相关文章

  1. mysql 中实现行变列

    前言: mysql行列变化,最难的就是将多个列变成多行,使用的比较多的是统计学中行变列,列变行,没有找到现成的函数或者语句,所以自己写了存储过程,使用动态sql来实现,应用业务场景,用户每个月都有使用 ...

  2. MySQL、DM 行转列及字段去重(Group_Concat())

    最近在使用数据库迁移适配,由MySQL 库迁移到达梦数据库,其中进行行转列时,MySQL转换达梦sql语法有些问题,特记录. 在MySQL 下有Group_Concat(expr)  ,在达梦及神通数 ...

  3. SQL 分组统计 行转列 CASE WHEN 的使用

    原文地址:http://blog.itpub.net/26451903/viewspace-733526 原文在分组统计部分  sql是有问题的     本文已将sql改正   已用红色标记  Cas ...

  4. mysql中的行转列

    //查看当前商品库存 function checkProductStock($product_id){ global $wpdb; $sql="SELECT post_id,max(if(( ...

  5. 【转】MySQL存储过程中使用动态行转列

    MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...

  6. MySQL存储过程的动态行转列

    MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...

  7. Mysql 列转行统计查询 、行转列统计查询

      -- ---------------------------- -- Table structure for `TabName` -- ---------------------------- D ...

  8. MYSQL 行转列 以及基本的聚合函数count,与group by 以及distinct组合使用

    在统计查询中,经常会用到count函数,这里是基础的 MYSQL 行转列 以及基本的聚合函数count,与group by 以及distinct组合使用 -- 创建表 CREATE TABLE `tb ...

  9. 关于MySQL的行转列的简单应用(二)---group函数

    MySQL的行转列.列转行.连接字符串  concat.concat_ws.group_concat函数用法使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一 ...

随机推荐

  1. ROS学习笔记(三)——ROS安装

    安装指南: indigo安装 http://wiki.ros.org/indigo/Installation/Ubuntu 中文参考教程: http://wiki.ros.org/cn 1.配置Uba ...

  2. 火狐浏览器 js 1到9月份 new DATE不返回时间

    new Date('2016-1'); //错误 1到9月份必须 01 02 ...... 正确 new Date('2016-01'); var nowMonth = nowMonth>=10 ...

  3. js 截取字符串,取指定位置的字符(完善中)

    1.获取字符串的最后一位或第一位 str.charAt(str.length - 1);    str.charAt(0);

  4. java aes_cbc_256 加密解密

    在之前我们在openssl上和ios上分别测试了 AES256位cbc模式的加密和解密 今天用java提供的api来测试一下:进而确定一下在PC,iOS,安卓上三个平台下的加密解密数据: 1. 首先通 ...

  5. IDEA建立---- java web项目

    1.新建一个javaweb项目 2.给项目命名 3.建立完的项目结构大概是这样(在web 下新建 两个目录lib 和 classes) 4.找到project Structure---------&g ...

  6. getParameterMap()的返回值为Map<String, String[]>,从其中取得请求参数转为Map<String, String>的方法如下:

    直接遍历报错:[Ljava.lang.String;@44739f3f Map<String, String> tempMap = new HashMap<String, Strin ...

  7. C# 中正确实现 IDisposable 接口

    作用 此接口的主要用途是释放非托管资源. 当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存. 但无法预测进行垃圾回收的时间. 另外,垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知 ...

  8. Const关键字

    const const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程 ...

  9. KMP算法解析(转自图灵社区)

    KMP算法是一个很精妙的字符串算法,个人认为这个算法十分符合编程美学:十分简洁,而又极难理解.笔者算法学的很烂,所以接触到这个算法的时候也是一头雾水,去网上看各种帖子,发现写着各种KMP算法详解的转载 ...

  10. IE10、IE11和Microsoft Edge的Hack

    IE10.IE11和Microsoft Edge的Hack 随着Win10的推广,Microsoft Edge浏览器已经越来越普遍,但是IE11也是伴随其中,尾大不掉. 首先,了解一下概念,如下图:微 ...