MySQL流浪記(六)—— CONCAT到GROUP_CONCAT的沿途風景(圖文詳解)

本文中的案例如下,可以自己測試一下,有問題可以留言哦。

CREATE TABLE staff (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50),
  job_id INT, 
  joindate DATE,
  salary DECIMAL(7,2)
);
INSERT INTO staff(name,job_id,joindate,salary) VALUES 
('孫悟空',4,'2000-12-17',8000.00),
('盧俊義',3,'2001-02-20',16000.00),
('林沖',3,'2001-02-22',12500.00),
('唐僧',2,'2001-04-02',29750.00),
('李逵',4,'2001-09-28',12500.00)
('孫悟空',4,'2000-12-17',8000.00),
('林沖',3,'2001-02-22',12500.00);

CONCAT

  CONCAT函數用於將兩個字符串連接起來,形成一個單一的字符串。
  語法:CONCAT(str1,str2,)
  輸出:拼接的字符串,如果有任何一個參數爲null,則返回值爲null。

SELECT CONCAT(id,name,job_id) id_name_job_id FROM staff;

在這裏插入圖片描述
  這樣簡單粗暴的將三個字符串連接起來,看起來是有一點不美觀,如果用符號連接起來會美觀一些。來試一下。

SELECT CONCAT(id,' - ',name,' - ',job_id) id_name_job_id FROM staff;

在這裏插入圖片描述
  可以看出來,將分割符以字符的形式添加到他們之間,這樣就美觀很多了。那麼問題來了,現在是三個字符可以很輕鬆地直接在他們之間添加分隔符 ,如果有一百個字符串呢,有一千個字符串呢,這就是一個比較大的工程了,聰明的前輩們肯定想到了這一點,CONCAT_WS函數就出現了。

CONCAT_WS

  CONCAT_WS和CONCAT函數用法基本是相同的,相當於是CONCAT的一個升級,它省去了CONCAT函數逐一添加分隔符的繁瑣操作,可以一勞永逸的添加分隔符。
  語法:CONCAT_WS(separator,str1,str2,)
  輸出:以separator爲分隔符的拼接字符串。分隔符不能爲NULL,否則返回NULL

SELECT CONCAT_WS(' - ',id,name,job_id) id_name_jod_id FROM staff;

在這裏插入圖片描述
  這樣就很方便的將他們風格,可以說是簡單又美觀。細心的你肯定發現了他們之間有好多重複的信息,比如說“孫悟空”和“李逵”的工號重複了,“盧俊義”和“林沖”的工號頁重複了,這樣說起來還可以變的更美觀一些,於是GROUP_CONCAT就出現了。

GROUP_CONCAT

  GROUP_CONCAT和前面的兩個函數的功能基本上是一樣的,也是將字符進行拼接,不同之處在於它“返回由屬於一組的列值連接組合而成的結果”,也就是說他是將鏈接的字符進行分組後輸出的。
  語法:group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
  返回:將GROUP BY產生的同一個組的字符進行連接。

SELECT job_id,GROUP_CONCAT(name) name FROM staff GROUP BY job_id;

在這裏插入圖片描述
  這樣就可以將相同工號的員工分到一組進行輸出,但是這樣還不是很完美,因爲有一些人被重複統計了,看來同名同姓的人還不少,可以使用去重函數DISTINCT,然後再進行分組,這樣雖然可以,但是SQL語句不夠簡潔,可以直接再GROUP_CONCAT函數中直接進行去重。

SELECT job_id, GROUP_CONCAT(DISTINCT name) name FROM staff GROUP BY job_id;

在這裏插入圖片描述
  可以看到,去重的效果還是可以的。既然可以去重了,排序可不可以呢?
在這裏插入圖片描述  可以發現對他們的名字進行了字典序排序,GROUP_CONCAT還有一個功能就是更改分隔符,它默認的分隔符是“,”。

SELECT job_id, GROUP_CONCAT(DISTINCT name ORDER BY name DESC SEPARATOR "-") name 
FROM staff GROUP BY job_id;

在這裏插入圖片描述
  到這裏就全部將GROUP_CONCAT函數說完了,歡迎大家批評指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章