Wie zähle ich in SQL DISTINCT über mehrere Spalten?


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>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.