2016-06-30 16 views
3

Ich habe folgende SQL zum Inspizieren doppelte Zeilen in einer Tabelle, die die folgenden Spalten: id, case_id, raw_name, initials, name, judge_id, magistrate_id und score.Count Anzahl der doppelten Zeilen in einer Tabelle

SELECT MIN(id), case_id, initials, raw_name, count(*) 
FROM my_table 
GROUP BY case_id, raw_name, initials, name, judge_id, magistrate_id 
HAVING count(*) > 1; 

(Eine Reihe Duplikat wird in Betracht gezogen, wenn sie die gleichen Werte in den case_id enthält raw_name, initials, name, judge_id und magistrate_id Spalten.)

Wie kann die Gesamtzahl der doppelten Zeilen erhalten, müssen gelöscht werden (wobei für jede Duplikate noch 1 Zeile übrig bleibt)?

+0

Sind Sie sicher, dass Sie alle Spalten in GROUP BY benötigen? Der übliche Weg besteht darin, dieselben Spalten wie die ausgewählten (aber keine Argumente zum Setzen von Funktionen) aufzulisten, d. H. Case_id, initialen und rohen_name. – jarlh

+0

Die Spalten in der GROUP BY sind die, die übereinstimmen sollten, um als Duplikate zu gelten, zumindest ist das mein Verständnis. Die Spalten im SELECT sind nur die, die ich mir ansehen möchte. – bard

+0

Ich sage nicht, du liegst falsch, wenn du weißt, was du tust. (Es ist jedoch ein häufiger Fehler, zu wenige oder zu viele Spalten in der group by-Klausel aufzulisten.) – jarlh

Antwort

0

versuchen Sie dies:

select count(distinct column_name) from

0

versuchen, wie diese

SELECT MIN(id), case_id, initials, raw_name, count(*)-1 
FROM my_table GROUP BY case_id, raw_name, initials, 
name, judge_id, magistrate_id HAVING count(case_id) > 1 and 
count(raw_name) > 1 and count(initials) > 1 and count(name) > 1 and 
count(judge_id) > 1 and count(magistrate_id) > 1 ; 

Sample DEMO seine gerade eine Probe

+0

'count (*) - 1' scheint nicht gültig zu sein SQL. Außerdem suche ich nach der Gesamtanzahl, nicht nach der Anzahl der Duplikate. – bard

0

Doppelte Probleme können oft in Bezug auf EXISTS(the other)

ausgedrückt werden

Für Ihre endgültige Löschung Abfrage: einfach ersetzen Sie die SELECT COUNT(*) von DELETE.

Verwandte Themen