按X或Y分组?

时间:2011-05-06 20:30:52

标签: 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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您无法在MySQL中轻松完成此操作。

问题在于,您定义的关系“类似于”并不是传递性的。在您的示例中,Smith Inc类似于John Smith(每SSN),John Smith类似于Jane Smith(每个名称),但是Smith IncJane Smith不相似。所以没有一个值可以与所有记录进行比较,而GROUP BY在这里没有帮助。

在支持递归的其他系统中,您可以构建此关系的传递闭包,这将允许分组,但这在MySQL中不是一件容易的事。

答案 1 :(得分:0)

像这样:

SELECT
    name,
    ssn,
    COUNT(*)
FROM TheTable
GROUP BY
    name,
    ssn