Ist es möglich, eine Bedingung in Count () anzugeben?
Ist es möglich, eine Bedingung anzugeben, in Count()
? Ich würde gerne zählen nur die Zeilen, zum Beispiel "Manager" in der Spalte "Position".
Ich will es tun, in der count-Anweisung, nicht mit WHERE
; ich Frage nach, weil ich auf zählen sowohl Führungskräfte und Andere in der gleichen SELECT
(so etwas wie Count(Position = Manager), Count(Position = Other))
so WHERE
ist kein nutzen für mich in diesem Beispiel.
Kommentar zu dem Problem
Boo alle * Benutzer, verwenden Sie Count(SomeColumnInYourTable) where Position = 'Manager'
@Mark: Auf alle modernen Datenbanken, nicht alle Unterschied.
@Mark & Philippe: Eigentlich kann eine große Differenz. Wenn das Feld null-Werte zulässt und nicht indiziert ist, die Abfrage berühren muss jeden Datensatz in der Tabelle, also mit count(*) und count(Feld) geben kann, verschiedene Ergebnisse und der unterschiedlichen Leistung.
Ich habe analysiert Ausführungspläne für count(*) gegen count(x) seit Jahren, und bisher habe ich noch nicht eine einzige gefunden, die zeigte, dass ein Unterschied in der Leistung. Deshalb würde ich wirklich gerne sehen, ein Beispiel für eine Abfrage, wo es einen Unterschied.
@Matthew: wir reden hier nicht über
SELECT *
, aber SELECT COUNT(*)
, das ist ein ganz anderes Biest. InformationsquelleAutor der Frage agnieszka | 2009-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht nur beschränken Sie die Abfrage selbst mit einem
where
- Klausel, die Sie verwenden können, die Tatsache, dass diecount
Aggregat zählt nur die nicht-null-Werte:Können Sie auch die
sum
Aggregat in ähnlicher Weise:InformationsquelleAutor der Antwort Guffa
Vorausgesetzt, Sie wollen nicht zum einschränken der Zeilen, die zurückgegeben werden, weil Sie die Aggregation andere Werte als gut, Sie können es so machen:
Sagen wir mal innerhalb der gleichen Spalte, die Sie hatte, Werte Manager, Supervisor und Teamleiter, könnte man das zählt, jeder wie diese:
InformationsquelleAutor der Antwort RedFilter
Hängt davon ab, was du meinst, aber die andere interpretation der Bedeutung ist, wo Sie wollen, zählen von Zeilen mit einem bestimmten Wert, aber nicht wollen, zu beschränken, die Sie AUSWÄHLEN, um NUR diejenigen Zeilen...
Würden Sie tun es mit SUM() mit einer Klausel, in der, wie dieser, statt mit COUNT():
z.B.
InformationsquelleAutor der Antwort AdaTheDev
@Guffa 's Antwort ist ausgezeichnet, nur darauf hinweisen, vielleicht ist der Reiniger mit einer IF-Anweisung
InformationsquelleAutor der Antwort Hivenfour
Können Sie auch die Pivot-Schlüsselwort wenn Sie SQL 2005 oder höher
mehr info und von Technet
Test-Daten
InformationsquelleAutor der Antwort Matthew Whited
Ich weiß, das ist wirklich alt, aber ich mag die
NULLIF
trick für solche Szenarien, und ich fand keine Nachteile so weit. Sehe gerade, meine copy&pasteable Beispiel, was nicht sehr praktisch ist, aber doch zeigt, wie es zu benutzen.NULLIF
könnte Ihnen eine kleine negative Auswirkung auf die Leistung, aber ich denke, es sollte immer noch schneller als die Unterabfragen.Kommentare willkommen 🙂
InformationsquelleAutor der Antwort z00l
Meinst du das:
Wenn dem so ist, dann yup, das funktioniert!
InformationsquelleAutor der Antwort Dana
InformationsquelleAutor der Antwort Peter
Ich denke, Sie können mit einem einfachen WHERE-Klausel, um nur die einige aufzählen, aufzeichnen.
InformationsquelleAutor der Antwort NawaMan
Hinweis mit PrestoDB SQL (aus Facebook), gibt es eine Abkürzung:
https://prestodb.io/docs/current/functions/aggregate.html
InformationsquelleAutor der Antwort Thomas Decaux
Fügen Sie einfach ein
WHERE
- Klausel und du bist gut zu gehen.InformationsquelleAutor der Antwort Kyle Rozendo
Mit dieser erhalten Sie die Zählung für Führungskräfte
InformationsquelleAutor der Antwort Rafael