参考文章 https://blog.csdn.net/Mary19920410/article/details/76545053 准备数据
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() 函数第一个为分隔符,后面为查询的列。即使查询的列中有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;
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;