1. 程式人生 > >MySQL中concat以及group_concat的使用

MySQL中concat以及group_concat的使用

create database test;
use test;
DROP TABLE IF EXISTS `concat`;
CREATE TABLE `concat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `singin` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `score` varchar(255) DEFAULT NULL
, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records -- ---------------------------- INSERT INTO `concat` VALUES ('1', '小明', '2018-11-09 16:59:17', '1', '1', '0'); INSERT INTO `concat` VALUES ('2', '小王', '2018-11-09 16:59:46', '3', '0',
'0'); INSERT INTO `concat` VALUES ('3', '小麗', '2018-11-09 17:00:50', '2', '1', '0'); INSERT INTO `concat` VALUES ('4', '小王', '2018-11-09 17:01:18', '4', '0', '0'); INSERT INTO `concat` VALUES ('5', '小明', '2018-11-09 17:01:42', '4', '1', '0'); INSERT INTO `concat` VALUES ('6', '小明', '2018-11-09 17:02:08', '2', '0', '0');
INSERT INTO `concat` VALUES ('7', null, '2018-11-09 17:02:37', '0', '0', null); INSERT INTO `concat` VALUES ('8', 'maryleo', '2018-11-09 17:03:01', '0', '1', '60'); INSERT INTO `concat` VALUES ('9', 'nancysun', '2018-11-09 17:03:24', '0', '1', '60');

concat()函式的使用

將表中的多個列,拼接為一個列。 如果該列中有一個列的值為null,那麼該列全部顯示為null。 t_hrm_accountinfo 表中有如下的幾列 使用concat進行檢索 ·SELECT CONCAT(Account,", “,STATUS,”, ", RealName) info from t_hrm_accountinfo · 結果如下圖。 可以看到檢索的結果把Account Status RealName 這幾列合併在了info這一列中。 如果concat中的列,有一列的資料在當前行為null,那麼這一行的資料直接顯示為null。 例如staffID在表中的資料為null, 在concat中填寫了staffid SELECT CONCAT(Account,", ",STATUS,", ", RealName,staffID) info from t_hrm_accountinfo; 這個是concat的缺點之一, 同時用分隔符也很麻煩。 這個時候就需要concat_ws()出場了。

concat_ws()

CONCAT_WS() 函式第一個為分隔符,後面為查詢的列。即使查詢的列中有null值,這一行也不顯示為null SELECT CONCAT_WS(" ," ,Account,STATUS,RealName,staffID) info from t_hrm_accountinfo; 如果分隔符為null, 那麼返回的結果全部為null SELECT CONCAT_WS(null ,Account,STATUS,RealName,staffID) info from t_hrm_accountinfo;

group_concat()函式

SELECT name ,min(id) FROM concat GROUP BY name; SELECT name,id from concat ORDER BY name; group_concat() 1、功能:將group by產生的同一個分組中的值連線起來,返回一個字串結果。

2、語法:group_concat( [distinct] 要連線的欄位 [order by 排序欄位 asc/desc  ] [separator ‘分隔符’] )

說明:通過使用distinct可以排除重複值;如果希望對結果中的值進行排序,可以使用order by子句;separator是一個字串值,預設為一個逗號。 使用group_concat()和group by顯示相同名字的人的id號:

SELECT `name`,GROUP_CONCAT(id) ids from concat GROUP BY `name`;

將上面的id號從大到小排序,且用’_'作為分隔符:

SELECT name ,GROUP_CONCAT(id order by id desc SEPARATOR '_') ids  from concat GROUP BY name;

注意 ,從大到小降序id,並不是從9 到1排序, 而是名字相同的人的id,內部進行排序.

上面的查詢中顯示了以name分組的每組中所有的id。接下來我們要查詢以name分組的所有組的id和score:

SELECT name ,GROUP_CONCAT(CONCAT_WS('-',id,score) ORDER BY id asc) id_score from concat GROUP BY name;