Wie zähle ich die Anzahl der Datensätze, die von einer Gruppe per Abfrage zurückgegeben wurden?
Zum Beispiel:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Gibt mir,
1
1
2
Ich muss die obigen Datensätze zählen, um 1 + 1 + 1 = 3 zu erhalten.
sql-server
tsql
count
group-by
Chris
quelle
quelle
Antworten:
Sie können beides in einer Abfrage mit der OVER-Klausel in einem anderen COUNT ausführen
quelle
column_1, column_2, column_3, column_4
). Dies kann eine signifikante Nebenwirkung sein oder auch nicht, je nachdem, wie Sie die Ergebnisse verarbeiten.Die einfachste Lösung besteht darin, eine abgeleitete Tabelle zu verwenden:
Eine andere Lösung ist die Verwendung eines Count Distinct:
quelle
Ich weiß, dass es ziemlich spät ist, aber niemand hat dies vorgeschlagen:
Dies funktioniert zumindest in Oracle - ich habe derzeit keine anderen Datenbanken zum Testen und bin mit der T-Sql- und MySQL-Syntax nicht so vertraut.
Ich bin mir auch nicht ganz sicher, ob es im Parser effizienter ist, dies auf diese Weise zu tun, oder ob die Lösung aller anderen, die select-Anweisung zu verschachteln, besser ist. Aber ich finde, dass dies aus Codierungssicht eleganter ist.
quelle
Ich habe versucht, dasselbe ohne Unterabfrage zu erreichen, und konnte das erforderliche Ergebnis wie unten erzielen
quelle
Ein CTE hat für mich funktioniert:
quelle
Wie wäre es mit:
quelle
Du könntest es tun:
quelle
In PostgreSQL funktioniert das bei mir:
quelle
Können Sie den folgenden Code unten ausführen? Es hat in Oracle funktioniert.
quelle
Sie können auch durch die folgende Abfrage erhalten
quelle
Versuchen Sie diese Abfrage:
quelle
Folgendes für PrestoDb , wo FirstField mehrere Werte haben kann:
quelle
Wie wäre es mit einer COUNT OVER-Partitionierungsfunktion (PARTITION BY {Spalte zum Gruppieren nach}) in SQL Server?
Wenn Sie beispielsweise Produktverkäufe nach ItemID gruppieren möchten und eine Zählung jeder einzelnen ItemID wünschen, verwenden Sie einfach:
Wenn Sie diesen Ansatz verwenden, können Sie die GROUP BY aus dem Bild herauslassen - vorausgesetzt, Sie möchten die gesamte Liste zurückgeben (da Sie möglicherweise eine Streifenbildung melden, bei der Sie die gesamte Anzahl der Elemente kennen müssen, ohne die Sie eine Band erstellen möchten um den gesamten Datensatz anzuzeigen, z. B. Reporting Services).
quelle
BandedItemCount
genau enthalten? Unterscheidet es sich zwischen Ausgabezeilen? Der Fragesteller sucht nach der Anzahl der verschiedenen Gruppierungsebenen.