mysql - 按 X 或 Y 分组?

标签 mysql sql aggregate-functions group-concat

我想弄清楚如何在多列上GROUP BY。我想在 SSN 地址匹配时对项目进行分组。例如,这里有三个记录:

account_number | name         | ssn         | address
---------------+--------------+-------------+----------------------
23952352340    | SMITH INC    | 123-45-6789 | P.O. BOX 123
3459450340     | JOHN SMITH   | 123-45-6789 | 123 EVERGREEN TERRACE
45949459494    | JANE SMITH   | 395-23-1924 | 123 EVERGREEN TERRACE

这就是我想要结束的:

names
----------------------
SMITH INC, JOHN SMITH, JANE SMITH

有什么建议吗?

最佳答案

你不能在 MySQL 中轻松地做到这一点。

问题是您定义的“类似于”关系不具有传递性。在您的示例中,Smith Inc 类似于 John Smith(根据 SSN),John Smith 类似于 Jane Smith(按名称),但 Smith IncJane Smith 不相似。因此,没有一个值可以与所有记录进行比较,GROUP BY 在这里无济于事。

在其他支持递归的系统中,您可以构建此关系的传递闭包,从而允许分组,但这在 MySQL 中并非易事。

关于mysql - 按 X 或 Y 分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5916685/

相关文章:

Mysql 插入时丢失 11 条记录

java - 如何在某些单元格上使用自定义操作的CriteriaQuery SUM?

java - 如何用Java创建MySQL表?

当数据库有实时连接时,MySql 的 'CREATE DATABASE IF NOT EXISTS' 行为异常

php - 如何按热门/上升职位订购

php - 如何显示数据库中的所有表名?

sql - 多连接查询返回很多结果且匹配不当

sql - Postgresql 11 - 按整数数组索引排序

mysql - 如何将数据库记录分组为 15 分钟的时间间隔

mysql - SQL替代双重子查询