Mysql group_concat的反向应用实现(Mysql列转行)
来源:互联网 发布:阿里云买卖域名 编辑:程序博客网 时间:2024/05/17 23:31
用过Mysql的都知道她有一个很好的实现行转列功能的函数group_concat函数,非常方便
现在的需求是有上面图二类似的结果集,需要把列二拆分 转换成行记录
我们知道如果是单条记录通过SUBSTRING_INDEX容易实现
但是如果是N条呢?同样也是可以使用SUBSTRING_INDEX来实现,只不过需要一个配置表,通过CROSS JOIN交叉连接实现,先看下CROSS JOIN
下面就通过CROSS JOIN和SUBSTRING_INDEX实现我们的需求,首先构建一个配置表
然后
然后就没有然后了。如图上的代码 有几个地方使用还是很巧妙的 不是吗?
最后此方法是不是比写个存储过程或者PHP/PYTHON简单些呢^_^
点击(此处)折叠或打开
- 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 UNIONSELECT 2) t1
- CROSS JOIN (SELECT 3 UNIONSELECT 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;
然后就没有然后了。如图上的代码 有几个地方使用还是很巧妙的 不是吗?
最后此方法是不是比写个存储过程或者PHP/PYTHON简单些呢^_^
0 0
- Mysql group_concat的反向应用实现(Mysql列转行)
- Mysql group_concat的反向应用实现(Mysql列转行)
- Mysql group_concat的反向应用实现(Mysql列转行)
- Mysql group_concat的反向应用实现(Mysql列转行)
- mysql group_concat列转行
- Mysql group_concat的反向应用如何实现?
- mysql 列转行,行转列,合并字段,group_concat()
- mysql 的列转行
- MySQL的行转列、列转行、连接字符串 concat、concat_ws、group_concat函数用法
- MySQL的行转列、列转行、连接字符串 concat、concat_ws、group_concat函数用法
- MySQL的行转列、列转行、连接字符串 concat、concat_ws、group_concat函数用法
- MySQL的行转列、列转行、连接字符串 concat、concat_ws、group_concat函数用法
- MySQL的行转列、列转行、连接字符串 concat、concat_ws、group_concat函数用法
- Mysql合并列(group_concat)
- mysql 列转行的技巧
- MySQL的group_concat函数--实现查询结果 按列拼接
- mysql中GROUP_CONCAT的应用
- mysql 列转行
- org.hibernate.type.SerializationException: could not deserialize
- CodeForces 233B. Non-square Equation【状压】
- UVa 10491 Cows and Cars
- 4-3 求链式表的表长 (10分)
- 学习笔记之指针和引用的区别
- Mysql group_concat的反向应用实现(Mysql列转行)
- 命名空间
- Android中的绝对路径和相对路径
- 分页jsp PageBean
- Cisco switchport trunk encapsulation dot1q 详解
- PHP安装redis扩展
- 异步回调
- java 分页 PageService
- mex 里面调用matlab函数