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;