( 转 ) Mysql group_concat 的反向应用实现(Mysql列转行)
用过Mysql的都知道她有一个很好的实现行转列功能的函数group_concat函数,非常方便
点击(此处)折叠或打开
- SELECT
- *
- FROM
- group_test;
- SELECT
- id,
- GROUP_CONCAT(sub_id)
- FROM
- `group_test`
- GROUP BY
- id;


现在的需求是有上面图二类似的结果集,需要把列二拆分 转换成行记录

我们知道如果是单条记录通过SUBSTRING_INDEX容易实现
点击(此处)折叠或打开
- select id,SUBSTRING_INDEX(sub_id,',',1) from group_test where id=3
- UNION
- select id,SUBSTRING_INDEX(SUBSTRING_INDEX(sub_id,',',2),',',-1) from group_test where id=3
- UNION
- select id,SUBSTRING_INDEX(SUBSTRING_INDEX(sub_id,',',3),',',-1) from group_test where id=3
但是如果是N条呢?同样也是可以使用SUBSTRING_INDEX来实现,只不过需要一个配置表,通过CROSS JOIN交叉连接实现,先看下CROSS JOIN
点击(此处)折叠或打开
- SELECT
- *
- FROM
- (SELECT 1 UNION SELECT 2) t1
- CROSS JOIN (SELECT 3 UNION SELECT 4) t2

下面就通过CROSS JOIN和SUBSTRING_INDEX实现我们的需求,首先构建一个配置表
点击(此处)折叠或打开
- CREATE TABLE digits (digit INT(1));
- INSERT INTO digits
- VALUES
- (0),
- (1),
- (2),
- (3),
- (4),
- (5),
- (6),
- (7),
- (8),
- (9);
- CREATE TABLE sequence (seq INT(3));
- INSERT INTO sequence (
- SELECT
- D1.digit + D2.digit * 10
- FROM
- digits D1
- CROSS JOIN digits D2
- );
然后
点击(此处)折叠或打开
- SELECT
- id,
- SUBSTRING_INDEX(
- SUBSTRING_INDEX(sub_id, ',', seq),
- ',' ,- 1
- ) sub_id,
- seq
- FROM
- sequence
- CROSS JOIN group_test
- WHERE
- seq BETWEEN 1
- AND (
- SELECT
- 1 + LENGTH(sub_id) - LENGTH(REPLACE(sub_id, ',', ''))
- )
- ORDER BY
- id,
- sub_id;

原贴: http://blog.chinaunix.net/uid-411974-id-3990697.html
( 转 ) Mysql group_concat 的反向应用实现(Mysql列转行)的更多相关文章
- mysql语法之case when then与列转行
mysql语法中case when then与列转行的使用场景非常丰富. case语句类似java中条件分支语句的作用,可以类比java中的switch语句或者if语句来学习. 其语法如下: case ...
- 关于mysql group_concat 不能显示为空的列的其他信息
今天做项目遇到一个问题,百度好久都没找到问题所在 是酱紫的,一张表 关联的表 然后我用sql语句查询 point.pid,point.pname,GROUP_CONCAT(downsite.pname ...
- JS 小工具 MYSQL WHERE IN条件 去掉换行符(列转行)
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 教您如何使用MySQL group_concat函数
MySQL group_concat函数是典型的字符串连接函数,下面就为您介绍MySQL group_concat的语法,希望对您学习MySQL group_concat函数有所帮助. MySQL g ...
- percona教程:MySQL GROUP_CONCAT的使用
percona有一篇blog: The power of MySQL GROUP_CONCAT 比较详细地介绍了GROUP_CONCAT函数的用法.简单地翻译了一下. 假设你有4名工程师,这周他们为6 ...
- Mysql group_concat函数被截断的问题
mysql group_concat函数被截断的问题 MySQL的 group_concat 函数默认返回1024个字节长度,超过长度的会被截断.最近程序中就遇到这个问题了. 通过如下命令可以查看 ...
- Mysql 列转行group_concat函数,与行转列
1.正常情况. SELECT JoinEventIds from nt_mainnum 2.使用group_concat函数 select group_concat(JoinEventIds) fro ...
- Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启
中午刚想趴一会,不料锅从天降!!!Mysql连不上了....... 现象如下: 现象1:登录mysql所在服务器,连接MySQL 成功: 现象2:通过客户端远程连接MySQL,返回失败,如下: Ent ...
- Mysql group_concat函数列转行,与行转列
例一: SELECT num from user 1.使用group_concat函数得到列转行 select group_concat(num) from user 2.使用SUBSTRING_IN ...
随机推荐
- day10_plus
刚才发奖哈哈哈 想不到被惨虐的我还能混个牌子哈哈哈好开心
- 原生ajax方法封装
/** * @function ajax request * @fields ajaxName:请求名称,method:请求方法,headers:setRequestHeader自定义部分,url:接 ...
- noip 2011观光公交
P1315 观光公交 95通过 244提交 题目提供者该用户不存在 标签贪心递推2011NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 风景迷人的小城Y 市,拥有n 个美 ...
- webstorm中把style的内容隐藏,如何把style的内容展开?
我们经常看到在webstorm中style的内容以...表示如下图所示,只有把光标移到上面时才会看到内容: 如何把上述的style的内容展开呢? 请按一下步骤操作: 第一步:File------> ...
- rpm的使用:查询、安装、卸载、升级
RPM 有五种操作模式,分别为:安装.卸载.升级.查询和验证. RPM 安装操作 命令: rpm -i 需要安装的包文件名 举例如下: rpm -i example.rpm 安装 example.rp ...
- RPC-Thrift(二)
TTransport TTransport负责数据的传输,先看类结构图. 阻塞Server使用TServerSocket,它封装了ServerSocket实例,ServerSocket实例监听到客户端 ...
- 最适合初学者学习的idea教程
https://github.com/judasn/IntelliJ-IDEA-Tutorial
- 【BZOJ】1827: [Usaco2010 Mar]gather 奶牛大集会
[算法]树型DP||树的重心(贪心) [题解] 两遍DFS,第一次得到所有节点子树的路径和,第二次给出除了该子树外其它部分的路径和,时时计算答案. long long!!! #include<c ...
- hdu 1509 Windows Message Queue (优先队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1509 题目大意:每一次输入都有序号和优先级,优先级小的先输出,优先级相同的话则序号小的先输出!第一次用 ...
- 【Mysql优化】key和index区别
mysql的key和index多少有点令人迷惑,这实际上考察对数据库体系结构的了解的. 1).key 是数据库的物理结构,它包含两层意义,一是约束(偏重于约束和规范数据库的结构完整性),二是索引 ...