Ist es möglich, eine Bedingung in anzugeben Count()
? Ich möchte nur die Zeilen zählen, die beispielsweise "Manager" in der Spalte Position haben.
Ich möchte es in der count-Anweisung tun, nicht mit WHERE
. Ich frage darüber, weil ich beide Manager rechnen müssen und andere in der gleichen SELECT
(so etwas wie Count(Position = Manager), Count(Position = Other))
so WHERE
keinen Sinn , in diesem Beispiel für mich ist.
sql
sql-server
tsql
Agnieszka
quelle
quelle
SELECT *
, aberSELECT COUNT(*)
das ist ein ganz anderes Biest.Antworten:
Wenn Sie die Abfrage selbst nicht einfach mit einer
where
Klausel einschränken können, können Sie die Tatsache verwenden, dass dascount
Aggregat nur die Nicht-Null-Werte zählt:Sie können das
sum
Aggregat auch auf ähnliche Weise verwenden:quelle
null
ist etwas Besonderes. Verwenden Siecase when IntegerField is null then ...
SUM(CONVERT(int, IsManager))
else null
for-case
Anweisung, sodass dascount()
Beispiel 10 Zeichen kürzer sein kann (wenn Sie das Leerzeichen zählen).Angenommen, Sie möchten die zurückgegebenen Zeilen nicht einschränken, weil Sie auch andere Werte aggregieren, können Sie dies folgendermaßen tun:
Nehmen wir an, in derselben Spalte, in der Sie die Werte Manager, Supervisor und Teamleiter hatten, können Sie die Anzahl der einzelnen Werte wie folgt ermitteln:
quelle
else
Teil anzugeben , nurend
direkt nach dem1
.else
in oft, da es die Ergebnisse der case-Anweisung besser dokumentiert, insbesondere für neue SQL-Entwickler. Der Kürze halber kann es in diesem Fall entfernt werden.Die Antwort von @Guffa ist ausgezeichnet. Weisen Sie nur darauf hin, dass eine IF-Anweisung möglicherweise sauberer ist
quelle
Hängt davon ab, was Sie meinen, aber die andere Interpretation der Bedeutung ist, wo Sie Zeilen mit einem bestimmten Wert zählen möchten, aber die nicht einschränken möchten
SELECT
, dass NUR diese Zeilen ...Sie würden es
SUM()
mit einer Klausel in tun , anstatt wie folgtCOUNT()
: zquelle
Sie können das Pivot-Schlüsselwort auch verwenden, wenn Sie SQL 2005 oder höher verwenden
mehr Infos und von Technet
Testdatensatz
quelle
Meinst du genau das:
Wenn ja, dann funktioniert das ja!
quelle
Ich weiß, dass dies wirklich alt ist, aber ich mag den
NULLIF
Trick für solche Szenarien und habe bisher keine Nachteile gefunden. Schauen Sie sich einfach mein kopierfähiges und einfügbares Beispiel an, das zwar nicht sehr praktisch ist, aber zeigt, wie man es verwendet.NULLIF
Möglicherweise haben Sie einen kleinen negativen Einfluss auf die Leistung, aber ich denke, es sollte immer noch schneller sein als Unterabfragen.Kommentare geschätzt :-)
quelle
quelle
Ich denke, Sie können eine einfache WHERE-Klausel verwenden, um nur die Anzahl einiger Datensätze auszuwählen.
quelle
Hier ist, was ich getan habe, um einen Datensatz zu erhalten, der sowohl die Summe als auch die Anzahl, die die Kriterien erfüllten, in jedem Versandbehälter enthielt. Damit kann ich die Frage beantworten: "Wie viele Versandbehälter haben mehr als X% Artikel über Größe 51?"
quelle
Beachten Sie, dass es bei PrestoDB SQL (von Facebook) eine Verknüpfung gibt:
https://prestodb.io/docs/current/functions/aggregate.html
quelle
Auf diese Weise erhalten Sie die Anzahl der Manager
quelle