这是我的情况,我有一个包含以下字段的数据库表:
name
place_code
email
phone
address
details
estd
others
和示例数据
如果您查看上面的示例表,前三个记录正在讨论 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/