問題:
姓名が同じであるか、SSNが同じであるPersonテーブルで一致するレコードの数を見つけます。
ギブンズ
テーブル構造:人
FirstName
LastName
SSN
RecordId
データ: Personテーブル
╔═══════════╦══════════╦═════════════╦══════════╗
║ FIRSTNAME ║ LASTNAME ║ SSN ║ RECORDID ║
╠═══════════╬══════════╬═════════════╬══════════╣
║ Bob ║ Smith ║ 111-11-1111 ║ 1 ║
║ Robert ║ Smyth ║ 111-11-1111 ║ 2 ║
║ Bob ║ Smith ║ 222-22-2222 ║ 3 ║
║ Tom ║ Gunn ║ 333-33-3333 ║ 4 ║
║ Jim ║ Gunn ║ 444-44-4444 ║ 5 ║
║ Jimmy ║ Gunn ║ 444-44-4444 ║ 6 ║
║ Alice ║ Jones ║ 555-55-5555 ║ 7 ║
║ Alice ║ Jones ║ 666-66-6666 ║ 8 ║
╚═══════════╩══════════╩═════════════╩══════════╝
望ましい結果:
╔════════════╦═══════════╦══════════╦═════════════╦══════════╗
║ MATCHCOUNT ║ FIRSTNAME ║ LASTNAME ║ SSN ║ RECORDID ║
╠════════════╬═══════════╬══════════╬═════════════╬══════════╣
║ 3 ║ Bob ║ Smith ║ 111-11-1111 ║ 1 ║
║ 2 ║ Robert ║ Smyth ║ 111-11-1111 ║ 2 ║
║ 2 ║ Bob ║ Smith ║ 222-22-2222 ║ 3 ║
║ 1 ║ Tom ║ Gunn ║ 333-33-3333 ║ 4 ║
║ 2 ║ Jim ║ Gunn ║ 444-44-4444 ║ 5 ║
║ 2 ║ Jimmy ║ Gunn ║ 444-44-4444 ║ 6 ║
║ 2 ║ Alice ║ Jones ║ 555-55-5555 ║ 7 ║
║ 2 ║ Alice ║ Jones ║ 666-66-6666 ║ 8 ║
╚════════════╩═══════════╩══════════╩═════════════╩══════════╝
私が試したこと
この問題を解決するために、GROUPBYとLEFTselfJOINの両方を使用してみました。
条件付きでグループ化する方法がないため、GROUPBYは失敗します。
LEFT self JOINは、一致数のほぼ2乗を返すため、失敗します。
私は自分の試みのコードを投稿しますが、実際のテーブルには多数の列があり、実際にははるかに複雑であり、ほぼ確実に問題がわかりにくくなります。