日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql之group_concat函数

發(fā)布時間:2023/11/29 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql之group_concat函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

mysql之group_concat函數(shù)

在介紹GROUP_CONCAT之前,我們先來看看concat()函數(shù)和concat_ws()函數(shù)。

先準備一個測試數(shù)據(jù)庫:

mysql> select * from scores; +----+----------+-------+ | id | name | score | +----+----------+-------+ | 1 | zhangsan | 100 | | 2 | lisi | 90 | | 3 | wangwu | 99 | | 4 | zhangsan | 92 | | 5 | zhangsan | 88 | | 6 | lisi | 89 | +----+----------+-------+ 6 rows in set

concat()函數(shù)

concat()函數(shù)的功能是將多個字符連接成一個字符串。

語法: concat(str1, str2,...)

返回結果為連接參數(shù)產(chǎn)生的字符串,如果有任何一個參數(shù)為null,則返回值為null。

mysql> select *,concat(name,score) from scores; +----+----------+-------+--------------------+ | id | name | score | concat(name,score) | +----+----------+-------+--------------------+ | 1 | zhangsan | 100 | zhangsan100 | | 2 | lisi | 90 | lisi90 | | 3 | wangwu | 99 | wangwu99 | | 4 | zhangsan | 92 | zhangsan92 | | 5 | zhangsan | 88 | zhangsan88 | | 6 | lisi | 89 | lisi89 | +----+----------+-------+--------------------+ 6 rows in set -- 加分隔符 & 起別名 mysql> select *,concat(name,':',score) as info from scores; +----+----------+-------+--------------+ | id | name | score | info | +----+----------+-------+--------------+ | 1 | zhangsan | 100 | zhangsan:100 | | 2 | lisi | 90 | lisi:90 | | 3 | wangwu | 99 | wangwu:99 | | 4 | zhangsan | 92 | zhangsan:92 | | 5 | zhangsan | 88 | zhangsan:88 | | 6 | lisi | 89 | lisi:89 | +----+----------+-------+--------------+ 6 rows in set

concat_ws()函數(shù)

concat()函數(shù)加分隔符比較麻煩,如果有10個字段連接起來,就得寫9個分隔符,concat_ws()函數(shù)就是為了解決這個問題。concat_ws就是concat with separator。

語法: concat_ws(separator, str1, str2, ...)

第一個參數(shù)指定分隔符。需要注意的是分隔符不能為null,如果為null,則返回結果為null。

mysql> select *,concat_ws(':',name,score) as info from scores; +----+----------+-------+--------------+ | id | name | score | info | +----+----------+-------+--------------+ | 1 | zhangsan | 100 | zhangsan:100 | | 2 | lisi | 90 | lisi:90 | | 3 | wangwu | 99 | wangwu:99 | | 4 | zhangsan | 92 | zhangsan:92 | | 5 | zhangsan | 88 | zhangsan:88 | | 6 | lisi | 89 | lisi:89 | +----+----------+-------+--------------+ 6 rows in set

group_concat函數(shù)

明白了concat()和concat_ws()函數(shù),我們來看一下GROUP_CONCAT()函數(shù)。它的功能就是將group by產(chǎn)生的同一個分組中的值連接起來,返回一個字符串結果。如果單獨使用,那么就將指定字段所有的值連接起來。

語法:

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

說明:通過使用distinct可以排除重復值;如果希望對結果中的值進行排序,可以使用order by子句;separator是一個字符串值,缺省為一個逗號。

我們知道可以使用group by語句對結果進行分組處理:

mysql> select * from scores group by name; +----+----------+-------+ | id | name | score | +----+----------+-------+ | 2 | lisi | 90 | | 3 | wangwu | 99 | | 1 | zhangsan | 100 | +----+----------+-------+ 3 rows in set

但是我們只能看到zhangsan的第一個成績,如果我想看到所有的成績呢?

mysql> select *,group_concat(score) from scores group by name; +----+----------+-------+---------------------+ | id | name | score | group_concat(score) | +----+----------+-------+---------------------+ | 2 | lisi | 90 | 90,89 | | 3 | wangwu | 99 | 99 | | 1 | zhangsan | 100 | 100,92,88 | +----+----------+-------+---------------------+ 3 rows in set-- 將分組結果按升序排序,并使用分隔符 : mysql> select *,group_concat(score order by score separator ':') from scores group by name; +----+----------+-------+--------------------------------------------------+ | id | name | score | group_concat(score order by score separator ':') | +----+----------+-------+--------------------------------------------------+ | 2 | lisi | 90 | 89:90 | | 3 | wangwu | 99 | 99 | | 1 | zhangsan | 100 | 88:92:100 | +----+----------+-------+--------------------------------------------------+ 3 rows in set-- 上面展示了以name分組后所有的score,現(xiàn)在多加展示一個id mysql> select *,group_concat(concat_ws(':',id,score) order by id) from scores group by name; +----+----------+-------+---------------------------------------------------+ | id | name | score | group_concat(concat_ws(':',id,score) order by id) | +----+----------+-------+---------------------------------------------------+ | 2 | lisi | 90 | 2:90,6:89 | | 3 | wangwu | 99 | 3:99 | | 1 | zhangsan | 100 | 1:100,4:92,5:88 | +----+----------+-------+---------------------------------------------------+ 3 rows in set-- 單獨使用 mysql> select group_concat(score) from scores; +---------------------+ | group_concat(score) | +---------------------+ | 100,90,99,92,88,89 | +---------------------+ 1 row in set

參考:

https://blog.csdn.net/mary19920410/article/details/76545053

轉載于:https://www.cnblogs.com/scuwangjun/p/9184894.html

總結

以上是生活随笔為你收集整理的mysql之group_concat函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。