2017-10-21 3 views
1

Ich muss die Anzahl der Zeilen zählen, die in Spalte A doppelte Datensätze haben und Spalte B muss 1 sein und muss auch dupliziert werden.MySQL-Abfrage zum Anzeigen von Duplikaten in zwei Spalten

SELECT COUNT(*) as num 
FROM myTable 
WHERE (columnB = 1 GROUP BY columnB HAVING COUNT(id_myTable) > 1) AND (columnA IN (SELECT columnA FROM myTable GROUP BY columnA HAVING COUNT(id_myTable) > 1)) 
ORDER BY columnC ASC` 

Angenommen, Sie diese Tabelle mit dem Namen myTable in MySQL haben:

/---------------------------------/ 
|  id | ColumnA | Column B | 
|---------------------------------| 
|   1 | Andre |  1 | 
|   2 | Joao |  2 | 
|   3 | Maria |  1 | 
|   4 | Joao |  1 | 
|   5 | Andre |  1 | 
|   6 | Maria |  1 | 
|   7 | Andre |  2 | 
/---------------------------------/ 

Das Ergebnis 4 sein muss, weil nur id 1, 3, 5 und 6 beiden Spalten dupliziert haben und die Bedingung für columnB muss immer gleich 1.

Mein PHP-Code sein Ergebnis zu geben:

$query = "select sum(c) from (select count(1) as c from myTable group by columnA, columnB having count(1) > 1 and columnB = 1) t"; $total_pages = mysql_fetch_array(mysql_query($query)); $total_pages = $total_pages[c]; $total_rows = $total_pages;

+2

Ihre Anfrage nicht syntaktisch korrekt ist. Sie sollten Beispieldaten und gewünschte Ergebnisse bereitstellen. –

+0

Ich @ GordonLinoff, versuchte ich mein Bestes, um mein Problem zu erklären. – MSimoes

Antwort

1
select sum(c) from (
        select count(1) as c from myTable 
        group by ColumnA, ColumnB 
        having count(1) > 1 and ColumnB=1 
        ) t 
+0

Dank @jophab für Ihre Antwort, es hat funktioniert. Es gibt das erwartete Ergebnis. – MSimoes

+0

Ich habe ein Problem gefunden, ich habe meine Frage mit 2 neuen Zeilen in der Tabelle bearbeitet. In meiner db habe ich den Status (columnB) für ID 6 geändert, und das Ergebnis muss 4 sein, und mit Ihrer Abfrage gibt es mir 2. – MSimoes

+1

@MSimoes Ich habe meine Antwort aktualisiert Abfrage ist ein Alias ​​für das Ergebnis der inneren Abfrage. Ein Alias-Name ist ein Muss. – jophab

1

Ich glaube, Sie wollen:

select sum(cnt) 
from (select columnA, columnB, count(*) as cnt 
     from myTable 
     where columnB = 1 
     group by columnA, columnB 
     having count(*) > 1 -- or do you mean `count(*) = 2`? 
    ) ab; 
+0

Danke @GordonLinoff. Ich meine, dass> 1 nicht gleich 2 ist, und ich brauche diese SpalteB immer gleich 1, weil ein Status aktiv ist. Übrigens verstand ich nicht ab; am Ende der Abfrage. – MSimoes

+0

Ich habe bemerkt, dass du deine Antwort geändert hast, danke, ich denke, mein Problem ist dasselbe wie bei Jophabs Code. Sie können meine Antwort auf ihn sehen. – MSimoes

Verwandte Themen