MySQL GROUP_CONCAT函式 將多行資料合併成一行
實際場景需求是這樣的:
某網站的後臺管理,新建一個使用者時,需要指派給其一個角色,該角色具有一定許可權:
比如,“銷售專員”這個角色有A,B,C的許可權,“銷售經理”這個角色有A,B,C,E的許可權,“財務”這個角色有B,C,D,E,F的許可權。
(直接可以理解為ORACLE資料庫中的“角色-許可權”)
開發的同學需求是知道某個角色,獲取其全部的許可權,並在一條row中顯示。
測試表建立:
即:
要求顯示為:
這裡就需要用到GROUP_CONCAT函式
官方給出的簡介是:
給出的語法和例子是:
簡單來說,可以透過:
來獲得這樣的結果集:
當然也可以對其的分隔符進行修改:
這將使分隔符改為" ; "
同樣也可以對name列進行排序:
當然官方還給出了可以透過DISTINCT來排除冗餘
用法如下:
作者公眾號(持續更新)
某網站的後臺管理,新建一個使用者時,需要指派給其一個角色,該角色具有一定許可權:
比如,“銷售專員”這個角色有A,B,C的許可權,“銷售經理”這個角色有A,B,C,E的許可權,“財務”這個角色有B,C,D,E,F的許可權。
(直接可以理解為ORACLE資料庫中的“角色-許可權”)
開發的同學需求是知道某個角色,獲取其全部的許可權,並在一條row中顯示。
測試表建立:
-
CREATE TABLE `a` (
-
`id` int(11) DEFAULT NULL,
-
`name` char(1) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1
- INSERT INTO a SELECT 1,'A';
- INSERT INTO a SELECT 1,'B';
- INSERT INTO a SELECT 1,'C';
- INSERT INTO a SELECT 2,'A';
- INSERT INTO a SELECT 2,'B';
-
mysql> SELECT * FROM a;
-
+------+------+
-
| id | name |
-
+------+------+
-
| 1 | A |
-
| 1 | B |
-
| 1 | C |
-
| 2 | A |
-
| 2 | B |
-
+------+------+
- 5 rows in set (0.00 sec)
-
+------+---------+
-
| id | name |
-
+------+---------+
-
| 1 | C,A,A,B |
-
| 2 | A,B |
- +------+---------+
這裡就需要用到GROUP_CONCAT函式
官方給出的簡介是:
GROUP_CONCAT() |
Return a concatenated string |
給出的語法和例子是:
This function returns a string result with the concatenated non-NULL values from a group. It returns NULL if there are no non-NULL values. The full syntax is as follows:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
mysql> SELECT student_name,
-> GROUP_CONCAT(test_score)
-> FROM student
-> GROUP BY student_name;
Or:
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR ' ')
-> FROM student
-> GROUP BY student_name;
簡單來說,可以透過:
- mysql> SELECT id , GROUP_CONCAT(name) name
- -> FROM a
- -> GROUP BY id;
-
+------+---------+
-
| id | name |
-
+------+---------+
-
| 1 | A,A,B,C |
-
| 2 | A,B |
- +------+---------+
當然也可以對其的分隔符進行修改:
-
mysql> SELECT id, GROUP_CONCAT(name SEPARATOR ';')
-
-> FROM a
- -> GROUP BY id;
同樣也可以對name列進行排序:
-
mysql> SELECT id, GROUP_CONCAT(name ORDER BY name DESC) name
-
-> FROM a
-
-> GROUP BY id;
-
+------+---------+
-
| id | name |
-
+------+---------+
-
| 1 | C,B,A,A |
-
| 2 | B,A |
-
+------+---------+
- 2 rows in set (0.00 sec)
當然官方還給出了可以透過DISTINCT來排除冗餘
用法如下:
-
mysql> SELECT id, GROUP_CONCAT(DISTINCT name) name
-
-> FROM a
-
-> GROUP BY id;
-
+------+-------+
-
| id | name |
-
+------+-------+
-
| 1 | A,B,C |
-
| 2 | A,B |
-
+------+-------+
- 2 rows in set (0.00 sec)
作者公眾號(持續更新)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1800845/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MySQL】MySQL如何合併多行資料,行轉列,group_concat 多行合併MySql
- Oracle 合併行/多行合併成一行Oracle
- mysql將多行資料合併或按組合並MySql
- Excel 快速合併多行資料為一行Excel
- 使用SQLLOADER將多行資料合併為一行進行載入SQL
- [Hive]用concat_w實現將多行記錄合併成一行Hive
- 利用Oracle分析函式row_number和sys_connect_by_path實現多行資料合併為一行Oracle函式
- mysql中的多行查詢結果合併成一個MySql
- MYSQL的GROUP_CONCAT函式MySql函式
- 利用shell中awk和xargs以及sed將多行多列文字中某一列合併成一行
- mysql函式之——GROUP_CONCAT(轉)MySql函式
- orcale 中查詢多行 後合併到一行顯示
- SQL實現多行合併一行 wmsys.wm_concatSQL
- SQL程式設計:group by合併結果字串 —> group_concat函式就能行SQL程式設計字串函式
- 多行資料放到一行上
- 用explode函式把json中用一層級資料一行轉換多行函式JSON
- 轉:SQL Server中將多行資料拼接為一行資料(一個字串)SQLServer字串
- 使用SQLLOADER將一行資料拆分為多行進行載入SQL
- Mysql將近兩個月的記錄合併為一行顯示MySql
- ORACLE單行函式與多行函式之七:多行函式之分組函式示例Oracle函式
- mysql group_concat 實現把分組欄位寫成一行的方法MySql
- GridView多行表頭合併View
- DBeaver如何刪除一行或多行資料
- SQL函式Group_concat用法SQL函式
- 如何將多行單元格資料轉變成一行?這個Excel技巧你一定不知道!Excel
- mysql資料庫多表同結構合併資料MySql資料庫
- 在oracle中將一行字串拆分成多行Oracle字串
- MySQL - 分組連線欄位函式GROUP_CONCAT的使用MySql函式
- Oracle的wm_concat和MySQL的group_concat函式OracleMySql函式
- mysql GROUP_CONCAT(test_score) 很好的拼字元的函式MySql字元函式
- SQL——多行併成一行顯示, 以字串分隔(相當於C#中的join)SQL字串C#
- ORACLE單行函式與多行函式之一Oracle函式
- 使用SQL語句將資料庫中的兩個表合併成一張表SQL資料庫
- 如何將兩個APK合併成一個APKAPK
- Oracle多行轉一行Oracle
- ORACLE單行函式與多行函式之二:字元函式示例Oracle函式字元
- ORACLE單行函式與多行函式之三:數值函式Oracle函式
- ORACLE單行函式與多行函式之四:日期函式示例Oracle函式