我有一个小型的MySQL数据库,其中包含我所居住的综合大楼中的100多个居民。为了简化起见,它包含单位编号,姓氏,名字,电话号码和电子邮件地址。电子邮件地址与问题无关,但是它们解释了为什么同一单位中具有相同姓氏的人具有不同的条目。

以下是一些示例数据:

UNIT,SURNAME,FIRST_NAME,PHONE
1,Evans,Bob,12345
2,Smith,Jane,23456
2,Smith,Jim,23456
3,Jones,Joe,45678
4,Jones,Jason,98765
5,Wong,Bill,95147
5,Lee,Jane,95147


总结以上数据:


鲍勃·埃文斯(Bob Evans)独自生活,
简和吉姆·史密斯住在同一个单元中,并且拥有相同的电话号码(但电子邮件地址不同,因此需要单独输入),
乔·琼斯(Joe Jones)和杰森·琼斯(Jason Jones),尽管姓氏相同,但居住在不同的单位,并且(显然)拥有不同的电话号码,并且
Wong和Jane Lee住在一起并且拥有相同的电话号码,但是姓氏不同。


我想创建一个选择查询,该查询将生成一个电话列表(按姓氏排序),该列表可以智能地识别具有相同姓氏的两个人,他们共享相同的电话号码(事实上,他们共享相同的单位号码,但是我假设认为与实际的MySQL查询无关),然后将其合并为一行,同时将姓氏不同但电话号码相同的人分开。换句话说,对以上数据进行选择的结果将如下所示:

UNIT,SURNAME,FIRST_NAME,PHONE
1,Evans,Bob,12345
4,Jones,Jason,98765
3,Jones,Joe,45678
5,Lee,Jane,95147
2,Smith,Jane & Jim,23456
5,Wong,Bill,95147


Some research导致我执行以下查询,几乎可以完成我想要的操作:

SELECT unit, surname, phone,
group_concat(first_name order by first_name SEPARATOR ' & ') AS name
FROM owners
GROUP BY surname;


但是,这结合了Joe Jones和Jason Jones在Joe Jones的电话和单位号码下:

3,Jones,Joe & Jason,45678


我想优化该查询,以保持Joe Jones和Jason Jones是他们自己的单独条目,并使用自己的电话号码。如果有帮助,每行都有一个主键“ id”列。

任何建议或指示都将受到欢迎。非常感谢。

克雷格

最佳答案

我会尝试将unitphone列添加到group by子句中:

例:

group by surname, unit

group by surname, phone

您还可以添加两列:

group by surname, unit, phone

关于mysql - 在MySQL选择结果中智能地合并重复的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40957771/

10-10 16:51