[英]find duplicates and merge their values in sql
我有一个数据库表,其中包含学校和姓名的列表:
school name point ------------------------ first dani good first dani precise third John nice first dani pro third John cute
我想以每个学校/名称组合的唯一记录结束,并合并点值,如下所示:
school name point -------------------------------------- first dani good and precise and pro third John cute and nice
您可以像这样使用GROUP_CONCAT
来获得结果:
SELECT school, name, GROUP_CONCAT(point SEPARATOR ' and ') points
FROM table
GROUP BY school, name
如果可以,并且您要用结果替换实际的表,则使用另一个名称tmptable创建相同的表。
INSERT INTO tmptable
SELECT school, name, GROUP_CONCAT(point SEPARATOR ' and ') points
FROM table
GROUP BY school, name;
DROP TABLE table;
RENAME TABLE tmptable TO table;
在这里,您可以在sqlfiddle中看到结果
这是一个适合您的样本
还有一个新的DISTINCT
SELECT
school,
`name`,
GROUP_CONCAT( `point` SEPARATOR ' and ')
FROM ( SELECT DISTINCT school,`name`, `point` FROM groupme) AS result
GROUP BY school,`NAME`;
SELECT
school,
`name`,
GROUP_CONCAT( `point` SEPARATOR ' and ')
FROM groupme
GROUP BY school,`name`;
样品
MariaDB [mysql]> select * from groupme;
+----+--------+------+---------+
| id | school | name | point |
+----+--------+------+---------+
| 1 | first | dani | good |
| 2 | first | dani | precise |
| 3 | third | John | nice |
| 4 | first | dani | pro |
| 5 | third | John | cute |
+----+--------+------+---------+
5 rows in set (0.01 sec)
MariaDB [mysql]> SELECT school, `name` , GROUP_CONCAT( `point` SEPARATOR ' and ')
-> FROM groupme
-> GROUP BY school,`name`;
+--------+------+------------------------------------------+
| school | name | GROUP_CONCAT( `point` SEPARATOR ' and ') |
+--------+------+------------------------------------------+
| first | dani | good and precise and pro |
| third | John | nice and cute |
+--------+------+------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [mysql]>
使用@ebahi的答案:
将查询更改为@fuzzytree中提到的内容:
SELECT school, name, GROUP_CONCAT(distinct point SEPARATOR ' and ') points
FROM table
GROUP BY school, name
sqlfiddle查看结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.