2017-03-13 4 views
0

Hier die Rohdaten haben:Ich muss in einer Situation, aus einer Tabelle auswählen, in dem eine Spalte nicht Duplikate

leasetenantssn | houseid

641078001 |  100 
    699061306 |  100 
    734296097 |  200 
    788930793 |  200 
    699061306 |  200 
    641078001 |  300 
    674926108 |  300 
    709106079 |  400 
    641078001 |  400 
    664067824 |  400 
    709106079 |  500 
    709106079 |  600 
    709106079 |  600 
    699061306 |  800 
    641078001 | 1000 
    699061306 | 1000 
    690260126 | 1000 
    690260126 | 1100 

Ich versuche, alle SSNs, die mehr als 3 einzigartige houseids an sie angehängt.

Mein erster Versuch war einfach:

Select leasetenantSSN from tenants group by leasetenantSSN having count(*) > 3; 

Und das zurück 709106079, 641078001, 699061306. Aber das Problem ist, 709.106.079 hat nur zwei einzigartige houseids, obwohl sie drei houseids insgesamt haben.

Sie sollten nicht zurückgegeben worden sein.

Das war mein nächster Versuch:

Select distinct on (houseid) leasetenantSSN from tenants group by houseid having count(*) > 3; 

Aber dies einen Fehler wirft, weil es leasetenantSSN will, indem sie in der Gruppe sein, aber ich kann das nicht tun, weil dann wird es nichts zurück.

Also ich weiß nicht, was ich jetzt tun soll.

Antwort

1

Ich versuche, alle SSNs, die mehr als 3 einzigartige houseids an sie angehängt.

Hier gehen Sie:

SELECT t.leasetenantSSN 
FROM tenants t 
WHERE (
     SELECT count(DISTINCT houseid) 
     FROM tenants 
     WHERE leasetenantSSN = t.leasetenantSSN 
    ) > 3 
GROUP BY t.leasetenantSSN 
; 

->

leasetenantssn 
---------------- 
    641078001 
    699061306 
(2 rows) 

Bitte betrachten Sozialversicherungsnummern verschlüsseln, sind sie sehr empfindlich für die Menschen, denen sie angehören.

+0

Prost, ich hätte gedacht, eine verschachtelte Abfrage zu verwenden. Und keine Sorge, diese SSNs sind komplett erfunden. –

+0

Froh, das zu hören! – Gab

Verwandte Themen