mysql group_concat去重_mysql 数据库group_concat函数的一些用法
對于group_contact函數一般懂一點sql的人來說,并不算太陌生,它主要配合group by 使用,起著分組時,將涉及行的相應的字段串聯成一個字段如下表a:
我們按照type分類,并將對應的名稱按逗號分隔保存為一個names字段可以寫為:
select type,group_concat(name) names from a group by type;
結果如下:
上面就是我們group_concat常見的用法,但是今天做項目時發現group_concat還有排序的語法,于是看了相關資料發現其完整的語法如下:
GROUP_CONCAT([DISTINCT] expr[,expr ……]
[ORDER BY {unsigned_integer| col_name | expr}
[ASC | DESC] [,col_name……]]
[SEPARATOR str_val])
官方解釋如下:
在MySQL中,你可以獲取表達式組合的連接值。你可以使用DISTINCT刪去重復值。假若你希望多結果值進行排序,則應該使用 ORDER BY子句。若要按相反順序排列,將 DESC (遞減) 關鍵詞添加到你要用ORDER BY 子句進行排序的列名稱中。默認順序為升序;可使用ASC將其明確指定。 SEPARATOR 后面跟隨應該被插入結果的值中間的字符串值。默認為逗號 (‘,’)。通過指定SEPARATOR '' ,你可以刪除所有分隔符
什么意思呢?我們來實現一個功能你就知道了。如下表b:
按type 分類,查詢出相應的姓名及年齡,保存為字段nameages,并按年齡從小到大的順序排序,用";"隔開,并去重.
sql 如下:
select type,group_concat(distinct name,age order by age desc separator ';')
nameages from a group by type;
張三 的數據就被去重了。并且nameages里面的數據是按照年齡從大到小的順序排列的。這里要注意distinct 后面的name,age字段值都相同才認為相同。
也許nameages里面的數據還不夠人性化,我們可以在group_concat里面加上contact實現。
select type,group_concat(distinct concat('姓名:',name,',年齡:',age) order by age desc separator ' ; ')nameages from a group by type; 結果如下:
讀者朋友們,group_concat用法get到了嗎?歡迎關注及討論!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql group_concat去重_mysql 数据库group_concat函数的一些用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: label y 训练集测试集x_训练集、
- 下一篇: linux监控电脑配置,Zabbix基本