2016-04-28 12 views
1

ziemlich oft muss ich dann die Anzahl der verschiedenen Datensätze in einer Tabelle zählen. Doch in MySQL wederAnzahl der verschiedenen Datensätze (Zeilen) in einer Tabelle

select count(distinct *) from t; 

noch

select count(distinct t.*) from t; 

Arbeit. Ich weiß, dass ich um das von

select count(*) as countdistinctrows 
from (
    select distinct * from t 
) x; 

arbeiten kann, aber das ist hässlich. Gibt es wirklich keine Möglichkeit, nach der Anzahl der einzelnen Zeilen zu fragen? By the way,

select distinct count(*) from t; 

ist nicht die Antwort, da dann unterschiedliche auf die Anzahl der Zeilen in der Tabelle angelegt wird, und gibt somit die gleiche wie

select count(*) from t; 
+1

'Distinct *' ist ein Oxymoron – Strawberry

+0

Natürlich fällt mir eine Frage ein: Warum sind doppelte Zeilen in einer Relationstabelle vorhanden? Gibt es keinen Primärschlüssel? Der "hässliche Workaround" ist der beste Weg, um zu zählen. – dnoeth

+0

@dnoeth: Sicher, man möchte keine doppelten Zeilen haben. Aber in meinem Szenario ist es nicht so einfach. Ich erstelle eine Tabelle aus Daten, wo z.B. Spalte 1 soll eine Zeichenfolge sein, die eine Kategorie angibt. Aber in den Quelldaten kann es "Kategorie 1" oder "Kategorie 1" sein. Ich benutze MySQL mit regexp_replace, um das Durcheinander zu säubern. Und danach würde ich gerne wissen, ob ich nur noch einzelne Zeilen habe. – diffset

Antwort

0

Wenn Sie dies nicht verwenden möchten :

select count(*) as countdistinctrows 
from (
    select distinct * from t 
) x; 

die einzige Alternative, die ich denken kann, ist es, alle Spaltennamen manuell an:

select count(distinct id, col1, col2, col3, ...) 
from t; 
+0

Nun, das ist nicht wirklich eine Option, da ich manchmal fünfzig oder mehr Spalten in einer Tabelle habe. – diffset

+0

@Diffset gibt es wirklich keine andere Möglichkeit, Sie können eine Anzahl (*) von einer Unterabfrage oder eine Anzahl (verschiedene Spalten ....) verwenden – fthiella

Verwandte Themen