Beste Antwort
In SQL kann die DISTINCT-Klausel *** vor *** der Auswahlliste verwendet werden. um doppelte Zeilen in der Ausgabe oder *** innerhalb *** einer Aggregationsfunktion wie COUNT zu vermeiden. Im zweiten Fall, insbesondere für COUNT, werden die Werte nur einmal wiederholt. Eine Lösung ist die mit der von Greg Kemnitz vorgeschlagene Verkettung, abgesehen von einem kleinen Fehler und Anpassungen in Abhängigkeit von Spaltentypen und Zeichenfolgenfunktionen in den verschiedenen SQL-Engines.
SELECT COUNT (DISTINCT CONCAT (col1, …. , col3)) FROM-Tabelle;
Die einfache Lösung
SELECT COUNT (DISTINCT col1, col2, col3) FROM-Tabelle;
funktioniert mit MySQL nicht Arbeit in DB2 und ich weiß nichts über andere Engines, aber es ist kein Standard-SQL.
Eine andere, kompliziertere Lösung, die effektiver sein kann, wenn der Vorgang häufig und ausreichend optimiert ist, erfordert die Erstellung von eine Ansicht
ANSICHT ERSTELLEN vw AS SELECT DISTINCT col1, col2, col3 GROUP BY col1, col2, col3; SELECT COUNT (*) FROM vw;
Answer
mysql> create table fake (foo tinyint (3) nicht null default 0, bar varchar (64) not null default „“) ;; Abfrage OK, 0 Zeilen betroffen (0,07 Sek.)
mysql> in falsche Werte einfügen (1, „foo“), (1, „bar“), (2, „foo“), (2, „bar“), (3, „baz“), (3, „for“); Abfrage OK, 6 Zeilen betroffen (0,00 Sek.) Datensätze: 6 Duplikate: 0 Warnungen: 0
mysql> wähle foo, bar, count (*) aus der gefälschten Gruppe nach foo, bar; + —– + —– + ———- + | foo | bar | count (*) | + —– + —– + ———- + | 1 | bar | 1 | | 1 | foo | 1 | | 2 | bar | 1 | | 2 | foo | 1 | | 3 | baz | 1 | | 3 | für | 1 | + —– + —– + ———- + 6 Zeilen im Satz (0,00 Sek.)
mysql> in falsche Werte einfügen (1, „foo „), (1,“ bar „), (2,“ foo „), (2,“ bar „), (3,“ baz „), (3,“ for „); Abfrage OK, 6 Zeilen betroffen (0,00 Sek.) Datensätze: 6 Duplikate: 0 Warnungen: 0
mysql> wähle foo, bar, count (*) aus der gefälschten Gruppe nach foo, bar; + —– + —– + ———- + | foo | bar | count (*) | + —– + —– + ———- + | 1 | bar | 2 | | 1 | foo | 2 | | 2 | bar | 2 | | 2 | foo | 2 | | 3 | baz | 2 | | 3 | für | 2 | + —– + —– + ———- + 6 Zeilen im Satz (0,00 Sek.)
myysql>