MYSQL开发技巧之行转列和列转行
行转列--两种方法
第一种方法:
行转列我们通常是使用交叉连接和子查询的方式做到,比如下面的例子,查询每个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开发技巧之行转列和列转行的更多相关文章
- Mysql - 开发技巧(二)
本文中的涉及到的表在https://github.com/YangBaohust/my_sql中 本文衔接Mysql - 巧用join来优化sql(https://www.cnblogs.com/dd ...
- MySQL开发技巧
MySQL基础表和数据 如何进行行列转换 行转列 场景:报表统计(sum()).汇总显示表数据:select * from score; 希望达到的效果 cross join SQL如下: selec ...
- MYSQL 开发技巧
主要涉及:JOIN .JOIN 更新.GROUP BY HAVING 数据查重/去重 1 INNER JOIN.LEFT JOIN.RIGHT JOIN.FULL JOIN(MySQL 不支持).CR ...
- Mysql开发技巧之删除重复数据
Mysql利用联表查询和分组来删除重复数据 //删除表中重复的id,保留最大的id mysql> select * from user; +----+------+ | id | name | ...
- 慕课网--mysql开发技巧一 学习笔记
现在存在下面的两张表,表的结构如下所示 师徒四人表结构:id,user_name,over数据:id user_name over1 唐僧 旃檀功德佛2 猪八戒 净坛使者3 孙悟空 斗战胜佛4 沙僧 ...
- MySQL开发技巧 第二禅(子查询中匹配两个值、解决同属性多值过滤的问题、计算累进税的问题)
https://blog.csdn.net/xiesq5112/article/details/52154169
- 【全面解禁!真正的Expression Blend实战开发技巧】第七章 MVVM初体验-在DataGrid行末添加按钮
原文:[全面解禁!真正的Expression Blend实战开发技巧]第七章 MVVM初体验-在DataGrid行末添加按钮 博客更新较慢,先向各位读者说声抱歉.这一节讲解的依然是开发中经常遇到的一种 ...
- MySQL开发规范与使用技巧总结
命名规范 1.库名.表名.字段名必须使用小写字母,并采用下划线分割. a)MySQL有配置参数lower_case_table_names,不可动态更改,Linux系统默认为 0,即库表名以实际情况存 ...
- mysql之行转列与列转行
mysql之行转列与列转行是数据查询的常见操作,以更好的来展示数据,下面就详细说说怎么实现. 行转列 行转列的话,就是将一条一条的行数据记录转换为一条列数据展示,一般来说是根据某一列来做汇总数据的操作 ...
随机推荐
- show_space/get_alert_log/get_trace_file
1.get_alert_log 获取alert文件的路径和名称 set serveroutput on --设置输出,让sqlplus在屏幕上可以输出.(要加入到login.sql中!) ...
- SQL 标准中的四种隔离级别
READ UNCOMMITED(未提交读) 在RERAD UNCOMMITED级别,事务中的修改,即使没有提交,对其他事务也都是可见的.事务可以读取未提交的数据,这也成为脏读(Dirty Read). ...
- Android中focusable属性的妙用——底层按钮的实现
http://www.cnblogs.com/kofi1122/archive/2011/03/22/1991828.html http://www.juziku.com/weizhishi/3077 ...
- A51汇编器的解释
A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产 ...
- 《Programming WPF》翻译 第5章 7.控件模板
原文:<Programming WPF>翻译 第5章 7.控件模板 如果仔细的看我们当前的TTT游戏,会发现Button对象并没有完全为我们工作.哪些TTT面板有内圆角? 图5-14 这里 ...
- git push error: RPC failed; result=56, HTTP code = 0 ,the remote end hung up unexpectedly
git push的时候发生标题上面的错误,不知道怎么解决.搜索了下stackoverflow,上面说是http的postBuffer不够导致的. 要运行以下命令: git config --globa ...
- Java学习系列(一)Java的运行机制、JDK的安装配置及常用命令详解
俗话说:“十五的月亮十六圆”.那学习是不是也是如此呢?如果把月亮看成是我们的愿望,那十五便是我们所处的“高原期”,坚持迈过这个坎,我相信你的愿望终究会现实的.记得马云曾说:今天很残酷,明天更残酷,后天 ...
- android WebView, WebChromeClient和WebViewClient加载网页基本用法
WebView, WebChromeClient和WebViewClient加载网页基本用法 webview是android中的浏览器控件,在一些手机应用中常会用到b/s模式去开发应用,这时webvi ...
- RFC3261--sip
本文转载自 http://www.ietf.org/rfc/rfc3261.txt 中文翻译可参考 http://wenku.baidu.com/view/3e59517b1711cc7931b716 ...
- setOpaque(true);设置控件不透明
setOpaque(true);设置控件不透明setOpaque(false);设置控件透明