字串連線聚合函式 幾例

2021-05-28 11:11:52 字數 1744 閱讀 8438

問題:  

userid  role_name         role_id

1         管理員              1

1         編輯                2

1         超級管理員          3

2         普通會員            4

3         高階會員            5

4         null             null

很簡單的資料,就是乙個使用者可能會對應多個角色,現在要求能用程式或者sql的方式使用者和角色逗號進行

分割。要求得到的資料如下:

userid  role_name

1        管理員,編輯,超級管理員

2        普通會員

3        高階會員

4        null

解答:

用程式估計是再簡單不過了,資料庫的話如下:

mysql:直接呼叫函式group_contact完成

oracle10g:直接掉函式wm_concat完成

oracle9i:麻煩點,不過主要是通過sys_connect_by_path,這個函式能樹枝進行按指定字元連線,之所以產

生樹是因為這裡面用到了oracle的start with 遞迴成樹的

(1) mysql

group_concat函式是典型的字串連線函式,下面就為您介紹mysql group_concat的語法,希望對您學習

mysql group_concat函式有所幫助。

mysql group_concat函式

完整的語法如下:

group_concat([distinct] 要連線的字段 [order by asc/desc 排序字段] [separator '分隔符'])

我的理解就是: 後面的 group by xx 分好組之後, 然後將組內的資料連線起來,預設是逗號

測試sql語句:

insert into role values(1,1,'管理員',1);

insert into role values(2,1,'編輯',2);

insert into role values(3,1,'超級管理員',3);

insert into role values(4,2,'普通會員',4);

insert into role values(5,3,'高階會員',5);

例子: select userid,group_concat(role_name,';') from role group by userid;

result:

1  管理員;,編輯;,超級管理員;

2  普通會員;

3  高階會員;

擴充套件:

如果oralce\mysql本身有提供這字串連線聚合函式的話,樓主這個問題,其實很容易解決的,即按userid分組後,再將同組的role_name進行字串連線就over。

像oralce中wm_concat函式還不是oracle所有版本都有的,而像這種字元連線函式在實際程式設計中,是很常用的,select catstr(role_name) from user group by userid,而這邊這個 catstr聚合函式是自己在資料庫pl/sql實現的,具體實現方式可參見

這樣catstr就具有通用性了

也就是自定義函式

參見另外一篇: oracle中使用者自己建立與呼叫聚合函式

SQL 字串連線聚合函式

mysql 直接呼叫函式group concat完成 oracle10g 直接掉函式wm concat完成 oracle9i 麻煩點,不過主要是通過sys connect by path,這個函式能樹枝進行按指定字元連線,之所以產生樹是因為這裡面用到了oracle的start with 遞迴成樹的 ...

mysql字串連線函式

mysql中concat函式 使用方法 concat str1,str2,返回結果為連線引數產生的字串。如有任何乙個引數為null 則返回值為 null。注意 如果所有引數均為非二進位制字串,則結果為非二進位制字串。如果自變數中含有任一二進位制字串,則結果為乙個二進位制字串。乙個數字引數被轉化為與之...

SQL CONCAT 字串連線函式

有的時候,我們有需要將由不同字段獲得的資料串連在一起。每一種資料庫都有提供方法來達到這個目的 mysql concat oracle concat sql server concat 的語法如下 concat 字串1,字串2,字串3,將字串1 字串2 字串3,等字串連在一起。請注意,oracle的c...