Группировать по X или Y? - PullRequest
4 голосов
/ 07 мая 2011

Я пытаюсь выяснить, как 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 ]

1 голос
/ 07 мая 2011

Вы не можете сделать это легко в MySQL.

Проблема в том, что отношение «похоже на», как вы определяете, не является транзитивным. В вашем примере Smith Inc похож на John Smith (на SSN), а John Smith похож на Jane Smith (на имя), но Smith Inc не похож на Jane Smith. Так что нет единого значения, с которым можно сравнивать все записи, и GROUP BY здесь не поможет.

В других системах, которые поддерживают рекурсию, вы можете построить транзитивное замыкание этого отношения, которое позволит группировать, но это не простая задача в MySQL.

0 голосов
/ 07 мая 2011

Как это:

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