行转列--两种方法
第一种方法:
行转列我们通常是使用交叉连接和子查询的方式做到,比如下面的例子,查询每个name的对应id的和
mysql> select * from user;
+----+------+
| id | name |
+----+------+
| | a |
| | b |
| | c |
| | d |
| | a |
| | a |
| | c |
| | d |
+----+------+
我们用分组查询能得到每个name的id的和,但是是行的形式展示的。
mysql> select name,sum(id) as 'id和' from user group by name;
+------+------+
| name | id和 |
+------+------+
| a | |
| b | |
| c | |
| d | |
+------+------+
我们可以使用别名的方式得到每一个分组的列表示,但是怎么把其他的拼接在一起呢?
mysql> select sum(id) as 'a的id和' from user  where name = 'a' group by name;
+---------+
| a的id和 |
+---------+
| 12 |
通过笛卡儿积连接我们可以把每个分组连接起来,得到了行转列的结果。
mysql> select * from (select sum(id) as 'a的id和' from user where name = 'a' group by name) as a cross join (select s
m(id) as 'c的id和' from user where name = 'b' group by name)
-> as b cross join (select sum(id) as 'c的id和' from user where name = 'c' group by name) as c cross join (select
um(id) as 'd的id和' from user where name = 'd' group by name) as d;
+---------+---------+---------+---------+
| a的id和 | c的id和 | c的id和 | d的id和 |
+---------+---------+---------+---------+
| | | | |
+---------+---------+---------+---------+

使用第一种方法,如果数据比较多的情况,会很复杂,不够简洁。

第二种方法:

mysql> select sum(case when name = 'a' then id end ) as 'a的id和',sum(case when name = 'b' then id end) as 'b的id和', su
m(case when name = 'c' then id end ) as 'c的id和', sum(case when name = 'd' then id end) as 'd的id和' from user;
+---------+---------+---------+---------+
| a的id和 | b的id和 | c的id和 | d的id和 |
+---------+---------+---------+---------+
| | | | |
+---------+---------+---------+---------+
使用分支控制case when then else end 来实现

列转行--

MYSQL开发技巧之行转列和列转行的更多相关文章

  1. Mysql - 开发技巧(二)

    本文中的涉及到的表在https://github.com/YangBaohust/my_sql中 本文衔接Mysql - 巧用join来优化sql(https://www.cnblogs.com/dd ...

  2. MySQL开发技巧

    MySQL基础表和数据 如何进行行列转换 行转列 场景:报表统计(sum()).汇总显示表数据:select * from score; 希望达到的效果 cross join SQL如下: selec ...

  3. MYSQL 开发技巧

    主要涉及:JOIN .JOIN 更新.GROUP BY HAVING 数据查重/去重 1 INNER JOIN.LEFT JOIN.RIGHT JOIN.FULL JOIN(MySQL 不支持).CR ...

  4. Mysql开发技巧之删除重复数据

    Mysql利用联表查询和分组来删除重复数据 //删除表中重复的id,保留最大的id mysql> select * from user; +----+------+ | id | name | ...

  5. 慕课网--mysql开发技巧一 学习笔记

    现在存在下面的两张表,表的结构如下所示 师徒四人表结构:id,user_name,over数据:id user_name over1 唐僧 旃檀功德佛2 猪八戒 净坛使者3 孙悟空 斗战胜佛4 沙僧 ...

  6. MySQL开发技巧 第二禅(子查询中匹配两个值、解决同属性多值过滤的问题、计算累进税的问题)

    https://blog.csdn.net/xiesq5112/article/details/52154169

  7. 【全面解禁!真正的Expression Blend实战开发技巧】第七章 MVVM初体验-在DataGrid行末添加按钮

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第七章 MVVM初体验-在DataGrid行末添加按钮 博客更新较慢,先向各位读者说声抱歉.这一节讲解的依然是开发中经常遇到的一种 ...

  8. MySQL开发规范与使用技巧总结

    命名规范 1.库名.表名.字段名必须使用小写字母,并采用下划线分割. a)MySQL有配置参数lower_case_table_names,不可动态更改,Linux系统默认为 0,即库表名以实际情况存 ...

  9. mysql之行转列与列转行

    mysql之行转列与列转行是数据查询的常见操作,以更好的来展示数据,下面就详细说说怎么实现. 行转列 行转列的话,就是将一条一条的行数据记录转换为一条列数据展示,一般来说是根据某一列来做汇总数据的操作 ...

随机推荐

  1. Maven基础教程

    更多内容请参考官方文档:http://maven.apache.org/guides/index.html 官方文档很详细,基本上可以查找到一切相关的内容. 另外,快速入门可参考视频:孔浩的maven ...

  2. WDCP LNMPA和LNMP 504 Gateway time-out错误的解决方法

    Nginx的特点是处理静态很给力,Apache的特点是处理动态很稳定,两者结合起来便是LNMPA,nginx处理前端,apache处理后端,这样处理静态会很快,处理动态会很稳定.当我以为安装完成以后便 ...

  3. CSS3 transition 动画过度属性

    <!DOCTYPE html> <html> <head> <style>  div { width:100px; height:100px; back ...

  4. python 学习(三)

    按照上次python 学习(二)的思路,第一步要实现从一个网站的页面上自动获取指定列表中的信息.折腾数日,得到一段可以正常运行的代码,如下: #web2.py import re import url ...

  5. IOS 开发之文件管理

    一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立.封闭.安全的空间,叫做沙盒.它一般存放着程序包文件(可执行文件).图片.音频.视频.plist文件.sqlite数据库 ...

  6. c# List集合的Find方法适用

    CabinEntity为你定义的实体 CabinEntity existCabin = listCabins.Find(delegate(CabinEntity cabinE)             ...

  7. meta 属性

    几乎所有的网页里,我们可以看到类似下面这段的html代码:<head><meta http-equiv="content-Type" content=" ...

  8. 关于Fragment与Activity的想法

    View,Fragment,Activity,ListView等都会涉及到Layout文件 不要从Layout来考虑,而是从Activity,Fragment,来考虑,Layout只是他们的一个属性 ...

  9. 单片机(MCU)使用常用名字解释

    总线:指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信. 地址总线(AB):地址总线是单向的,用于传送地址信息.地址总线的宽度为16位,因此基外部存储器直接寻址64K,16位地址总 ...

  10. EXTJS 4.2 实现 gridpanel 鼠标悬停单元格以提示信息的方式显示单元格内容。

    由于gridpanel的单元格里的文字太多时候,都由省略号代替,就想实现如题的功能,经过反复实验,终于搞定了!直接上代码: me.on('itemmouseenter', function (view ...