Warum können wir count(distinct *)
in SQL nicht verwenden? Wie in, um alle verschiedenen Zeilen zu zählen?SQL-Anzahl (*) und distinct
Antwort
select count(*) from (select distinct * from MyTable) as T
Obwohl ich, dass Sie stark darauf hin, alle Fragen neu denken, die DISTINCT
verwenden. In einem großen Prozentsatz der Fälle ist GROUP BY
geeigneter (und schneller).
EDIT: die Frage Kommentare gelesen haben, sollte ich, dass Sie nie das DBMS fragen sollte weisen darauf hin, mehr Arbeit zu tun, als tatsächlich benötigt ein Ergebnis erhalten tun. Wenn Sie im Voraus wissen, dass es keine doppelten Zeilen in einer Tabelle geben wird, verwenden Sie nicht DISTINCT
.
@CHristian - hi, habe es noch nie so gemacht. aus Neugier lief es mit einer vorhandenen Tabelle an meinem Ende und ich bekomme 'falsche Syntax in der Nähe') ''. Arbeit in ms SQL Server? Hinweis - meine Auswahl innerhalb der Klammern läuft perfekt – Kamal
Auf Oracle DISTINCT und GROUP BY haben den gleichen Ausführungsplan, da DISTINCT in implementiert GROUP BY. Also sollte es keinen Unterschied geben. –
@Kamal: Entschuldigung, vergessen Sie, dass SQL Server mit verschachtelten Abfragen ein wenig unsicher ist. Das Hinzufügen eines Alias-Namens am Ende ('als T') löste das Problem. –
Sie können in der Tat.
Wenn Sie einen Bezeichner haben, werden Sie keine völlig unterschiedlichen Zeilen haben. Aber Sie könnten zum Beispiel tun:
SELECT COUNT(DISTINCT SenderID) FROM Messages
Sie können wählen, um alle Spalten in der Tabelle und Gruppe von ...
SELECT column1, column2, column3, count(*)
FROM someTable
GROUP BY column1, column2, column3
Das bekommt eigentlich nicht, was die Frage fragt. –
warum nicht?
select
count(distinct name)
from
people
Weil zwei Leute den gleichen Namen haben könnten. Das OP fragte nach COUNT (DISTINCT *). –
Entschuldigung, es war ein anderer Text in der Frage, als ich antwortete. – silent
UberKludge und kann postgre spezifisch, aber
select count(distinct table::text) from table
Sie können einen CTE in SQL Server versuchen, 2005
;WITH cte AS (
SELECT DISTINCT Val1,Val2, Val3
FROM @Table
)
SELECT COUNT(1)
FROM cte
Zur Beantwortung der Frage, Aus der Dokumentation
Gibt an, dass alle Zeilen gezählt werden sollen, um die Gesamtzahl der Zeilen zurückzugeben ein Tisch. COUNT () benötigt keine Parameter und kann nicht mit DISTINCT verwendet werden. COUNT () benötigt keinen Ausdrucksparameter, da Definition Informationen über eine bestimmte Spalte nicht verwendet. COUNT (*) gibt die Anzahl Zeilen in einer angegebenen Tabelle zurück, ohne dass Duplikate entfernt werden. Es zählt jede Zeile separat. Dazu gehören Zeilen, die Nullwerte enthalten.
Wenn Sie sagen: "Aus der Dokumentation" welche Dokumentation wäre das? –
Sql Server Hilfe Dokumentation. http://msdn.microsoft.com/en-us/library/ms175997.aspx –
COUNT (*) ist die Anzahl der Zeilen, die mit einer Abfrage übereinstimmen.
Eine Zeile enthält eindeutige Informationen wie Rowid. Alle Zeilen sind per Definition verschieden.
Sie müssen stattdessen die verschiedenen Instanzen von Werten in einem Feld zählen.
Warum enthält eine Zeile eindeutige Informationen? Es muss nicht ... es sollte wahrscheinlich, aber es ist nicht * erforderlich *. – Murph
einige Sprachen sind möglicherweise nicht in der Lage, 'distinct *' zu behandeln. Wenn Sie also die Unterscheidung über viele Spalten vornehmen möchten, können Sie 'distinct ColumnA || verwenden ColumnB ', kombiniert die Werte vor der Beurteilung, wenn sie unterschiedlich sind. Achten Sie darauf, ob Ihre Variablen numerisch sind und Ihr Datenbank-Handler eine automatische Typumwandlung in Zeichenketten vornehmen kann.
Dies ist auch keine vollständige Beweismethode wie sie ist. Zum Beispiel würden ('test', 'string') und ('tes', 't string') gleich aussehen. Sie könnten etwas mit dem Auffüllen der Saiten tun, aber es wird unordentlich. Besser IMO, um nur eine Unterabfrage mit DISTINCT zu verwenden und dann einen COUNT davon zu erhalten. –
select count (Tag_no) from tab_raw_tag_value where tag_no in (select distinct tag_no from tab_raw_tag_value)
Dies beantwortet die Frage nicht –
- 1. SQL distinct und count
- 2. SELECT DISTINCT und
- 3. zählen distinct und Fensterfunktionen
- 4. MySQL DISTINCT und Leerzeichen
- 5. LINQ to SQL Distinct und
- 6. Liste mit distinct und StringComparison.OrdinalIgnoreCase
- 7. SPARQL Query und Distinct Count
- 8. .net Distinct() und komplex conditons
- 9. Problem nHibernate Distinct und Paging
- 10. distinct vs. fd/distinct in core.logic
- 11. SELECT DISTINCT
- 12. Wie Distinct
- 13. Distinct Werte
- 14. Kann ich COUNT() und DISTINCT zusammen verwenden?
- 15. SortiertNach und Distinct mit LINQ-to-Entities
- 16. PostgreSQL - „DISTINCT ON“ und „GROUP BY“ Syntax
- 17. Verwenden von Distinct mit LINQ und Objekten
- 18. Distinct() Befehl mit Skip() verwendet und limit()
- 19. SQL Query - Kombinieren Sie DISTINCT und TOP?
- 20. MySQL Distinct und LINKE JOIN gibt doppelte
- 21. Distinct Records mit Joins und Bestellung
- 22. SELECT DISTINCT und ORDER BY in MySQL
- 23. Mit WHERE-Klausel und DISTINCT ON
- 24. SQL Distinct Spalt auswählen und aktuelles Datum
- 25. Android: Distinct und GroupBy in ContentResolver
- 26. Kombinieren beliebige Eigenschaftspfad, distinct, und zählen
- 27. distinct und Fall innerhalb WHERE-Klausel
- 28. SELECT DISTINCT funktioniert nicht
- 29. sql distinct values
- 30. DISTINCT-Klausel in SQLite
Was meinen Sie mit "distinct rows"? –
Haben Sie Zeilen, die in der gesamten Zeile dupliziert sind, ist das, was Sie suchen? –
Nun, wenn ich daran denke, weil unsere Tabellen normalisiert sind, haben wir nicht genau die gleichen Zeilen, also ist es nutzlos richtig ?? Ist das der Grund? –