Mysql group_concat的反向应用如何实现?
来源:互联网 发布:淘宝助手怎么上传宝贝 编辑:程序博客网 时间:2024/05/16 04:00
用过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;
然后就没有然后了。如图上的代码 有几个地方使用还是很巧妙的 不是吗?
最后此方法是不是比写个存储过程或者PHP/PYTHON简单些呢^_^
来源:中国统计网
- Mysql group_concat的反向应用如何实现?
- Mysql group_concat的反向应用实现(Mysql列转行)
- Mysql group_concat的反向应用实现(Mysql列转行)
- Mysql group_concat的反向应用实现(Mysql列转行)
- Mysql group_concat的反向应用实现(Mysql列转行)
- mysql中GROUP_CONCAT的应用
- 如何使用MySQL的 group_concat函数
- PostgreSQL如何实现MySQL中的group_concat聚集函数(简单的拼接功能)
- group_concat()函数的应用
- mysql的group_concat函数
- mysql的GROUP_CONCAT
- MySql中的几个小函数的应用(group_concat,concat_ws)
- SQL 实现 Mysql Group_Concat()效果
- postgresql如何实现group_concat功能
- 利用MySQL 的GROUP_CONCAT函数实现聚合乘法
- MySQL的group_concat函数--实现查询结果 按列拼接
- 【MySQL】字段拆分需求实现(group_concat的逆操作)
- Sybase数据库实现等效的mysql中group_concat功能
- 3.3V过压保护电路
- linux 文件夹权限
- Android——蓝牙利用RSSI进行距离测算
- 算法:冒泡算法
- 约瑟夫环
- Mysql group_concat的反向应用如何实现?
- java模板注释(Eclipse)
- Stirling 数
- CentOS7 vs CentOS 6的不同之处
- RabbitMQ(五)—路由选择
- 5.2 服务端开发
- VMware怎么安装VMware tools
- 谈一谈Elasticsearch的集群部署
- Android性能优化之实现一个线程多个任务--HandlerThread