六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

對于mysql表數據行列轉換方法的講解

[摘要]開發過程中,因為歷史原因或性能原因,需要對表的列數據轉為行數據,或行數據轉換為列數據使用,本文將介紹mysql表數據行列轉換的方法,提供完整演示例子及sql技巧。 1.行轉列創建測試數據表及數據CR...

開發過程中,因為歷史原因或性能原因,需要對表的列數據轉為行數據,或行數據轉換為列數據使用,本文將介紹mysql表數據行列轉換的方法,提供完整演示例子及sql技巧。

1.行轉列

創建測試數據表及數據

CREATE TABLE `option` ( `category_id` int(10) unsigned NOT NULL COMMENT '分類id', `name` varchar(20) NOT NULL COMMENT '名稱', KEY `category_id` (`category_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `option` (`category_id`, `name`) VALUES
(1, '大'),
(1, '中'),
(1, '小'),
(2, '奔馳'),
(2, '寶馬'),
(3, '2015'),
(3, '2016'),
(3, '2017'),
(3, '2018'),
(4, '1m'),
(4, '2m');mysql> select * from `option`;
+-------------+--------+  category_id   name    
+-------------+--------+            1   大      
            1   中      
            1   小      
            2   奔馳    
            2   寶馬    
            3   2015    
            3   2016    
            3   2017    
            3   2018    
            4   1m                  4   2m      
+-------------+--------+

行轉列后,期望得到以下結果

+-------------+---------------------+  category_id   name                 
+-------------+---------------------+            1   大,中,小             
            2   奔馳,寶馬            
            3   2015,2016,2017,2018              4   1m,2m                
+-------------+---------------------+

行轉列,可以使用group_concat()函數結合group by實現。

group_concat()函數可以得到表達式結合體的連結值,默認分隔符為逗號,可以通過separator設置為其他分隔符。

注意:group_concat()函數對返回的結果有長度限制,默認為1024字節,不過對于正常的情況已經足夠。

關于group_concat()函數的使用可以參考我之前的文章:《mysql函數concat與group_concat使用說明》

執行結果:

mysql> select category_id,group_concat(name) as name from `option` group by category_id order by category_id;
+-------------+---------------------+  category_id   name                 
+-------------+---------------------+            1   大,中,小             
            2   奔馳,寶馬            
            3   2015,2016,2017,2018              4   1m,2m                
+-------------+---------------------+

2.列轉行

創建測試數據表及數據

CREATE TABLE `option2` ( `category_id` int(10) unsigned NOT NULL COMMENT '分類id', `name` varchar(100) NOT NULL COMMENT '名稱集合') ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `option2` (`category_id`, `name`) VALUES
(1, '大,中,小 '),
(2, '奔馳,寶馬'),
(3, '2015,2016,2017,2018'),
(4, '1m,2m');mysql> select * from `option2`;
+-------------+---------------------+  category_id   name                 
+-------------+---------------------+            1   大,中,小             
            2   奔馳,寶馬            
            3   2015,2016,2017,2018              4   1m,2m                
+-------------+---------------------+

列轉行后,期望得到以下結果

+-------------+--------+  category_id   name    
+-------------+--------+            1   大      
            1   中      
            1   小      
            2   奔馳    
            2   寶馬    
            3   2015    
            3   2016    
            3   2017    
            3   2018    
            4   1m                  4   2m      
+-------------+--------+

列轉行比行轉列復雜,對于列內容是用分隔符分隔的數據,我們可以使用substring_index()函數進行分割輸出,并結合笛卡爾積來實現循環。

select a.category_id,substring_index(substring_index(a.name,',',b.category_id),',',-1) as name from `option2` as ajoin `option2` as b on b.category_id<=(length(a.name) - length(replace(a.name,',',''))+1)order by a.category_id,b.category_id;

執行結果:

mysql> select a.category_id,substring_index(substring_index(a.name,',',b.category_id),',',-1) as name from `option2` as a    -> join `option2` as b on b.category_id<=(length(a.name) - length(replace(a.name,',',''))+1)    -> order by a.category_id,b.category_id;
+-------------+--------+  category_id   name    
+-------------+--------+            1   大      
            1   中      
            1   小      
            2   奔馳    
            2   寶馬    
            3   2015    
            3   2016    
            3   2017    
            3   2018    
            4   1m                  4   2m      
+-------------+--------+

本篇講解了mysql表數據行列轉換方法 ,更多相關內容請關注潘合平中文網。

相關推薦:

如何通過php 實現多個一維數組合拼成二維數組的方法

講解php 返回數組中指定多列的相關方法

關于php 基于redis計數器類的詳解

以上就是關于mysql表數據行列轉換方法的講解的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 热久久思思 | 青青草原伊人 | 欧美一卡二卡三卡四卡乱码 | 欧美亚洲国产精品 | 在线激情| 天天干天天操天天碰 | 青青青线在线观看 | 一区二区三区在线视频播放 | 性香港xxxxx免费视频播放 | 亚洲欧洲视频在线 | 在线视频 亚洲 | 手机日韩看片 | 香蕉免费一级视频在线观看 | 台湾美性中文娱乐网 | 一区二区三区视频网站 | 青青青国产在线观看 | 中文字幕亚洲国产 | 亚洲欧美在线视频 | 中文字幕精品亚洲无线码二区 | 片成年免费观看网站黄 | 天天操天天干天搞天天射 | 亚洲 自拍 欧美 综合 | 日韩精品一区二区三区中文 | 亚洲人成综合在线播放 | 人人爽天天爽夜夜爽曰 | 香蕉啪| 午夜无遮挡怕怕怕免费视频 | 亚洲综合影视 | 日韩免费黄色片 | 亚洲最新在线观看 | 亚洲性大片 | 日韩免费毛片全部不收费 | 天天躁日日躁狠狠躁中文字幕 | 欧美夜夜骑 | 性久久久久久久久久久 | 色视频线观看在线播放 | 在线亚洲精品中文字幕美乳 | 午夜欧美性欧美 | 日本国产一区在线观看 | 色综合久久久高清综合久久久 | 在线老司机 |