MYSQL - 从相似的行中创建单个记录,为大多数列选择最大长度的值

标签 mysql sql aggregate-functions similarity

这是我的情况,我有一个包含以下字段的数据库表:

name
place_code
email
phone
address
details
estd
others

和示例数据

enter image description here

如果您查看上面的示例表,前三个记录正在讨论 xyz 和位置代码 1020

我想根据这三个记录创建一条记录

substring(name,1,4) 
place_code 

(我很幸运,所有相似的记录都满足这个条件并且在表中是唯一的。)

对于记录列长度最大的其他列。例如,对于上述 3 条记录,电子邮件应为 test@te.com,电话应为 657890,详细信息应为“testdetails”。

应该对所有表执行此操作。 (有些只有一条记录,有些最多有 10 条记录。)

有关查询的任何帮助可以帮助我获得所需的结果吗?

回答

有人发布了以下答案并将其删除。但这看起来是一个不错的解决方案

SELECT max(name),
       place_code,
       max(email),
       max(phone),
       max(address),
       max(details),
       max(estd),
       max(others)
FROM table_x
GROUP BY substring(name,1,4),place_code

如果你们发现其中有任何问题,请告诉我?

谢谢大家

基兰

最佳答案

您需要出色的 GROUP_CONCAT 聚合函数。

SELECT place_code, 
       substring(name,1,4) name, 
       GROUP_CONCAT(email), 
       GROUP_CONCAT(Phone), 
       GROUP_CONCAT(details)
  FROM table
 GROUP BY place_code, substring(name,1,4)

它的选项允许您控制字符串中项目的顺序和分隔符等内容。请参阅http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

关于MYSQL - 从相似的行中创建单个记录,为大多数列选择最大长度的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283013/

相关文章:

SQL获取满足提款标准的未偿余额总额

mysql - 如何正确构建这个查询?这是一个合适的 MySql 方案吗?

PHP语法错误

mysql - 两个查询到一个有两列的表

mysql - 一段时间内的累计计数

sql - 从客户事件、SQL 中查找放弃的搜索

php(ssh2,tunnel),我无法连接我的远程mysql服务器

php - MySQL 过程将空结果返回给 PHP

mysql - 对于单个Rails应用程序使用两个不同的数据库(MySQL和Postgres)

mysql - 从 MySQL 中的多个表创建 View