Czy można określić warunek w Count()
? Chciałbym policzyć tylko wiersze, które mają na przykład „Menedżer” w kolumnie Pozycja.
Chcę to zrobić w instrukcji count, nie używając WHERE
; Pytam o to, ponieważ muszę policzyć zarówno menedżerów, jak i innych w tym samymSELECT
(coś jak Count(Position = Manager), Count(Position = Other))
więc WHERE
nie ma sensu dla mnie w tym przykładzie.
sql
sql-server
tsql
agnieszka
źródło
źródło
SELECT *
, aleSELECT COUNT(*)
, co jest zupełnie inną bestią.Odpowiedzi:
Jeśli nie możesz po prostu ograniczyć samego zapytania za pomocą
where
klauzuli, możesz użyć faktu, żecount
agregat liczy tylko wartości inne niż null:Możesz także użyć
sum
agregatu w podobny sposób:źródło
null
jest wyjątkowy. Użyjcase when IntegerField is null then ...
SUM(CONVERT(int, IsManager))
else null
forcase
, więccount()
przykład może mieć 10 znaków krótszy (jeśli policzysz spację).Zakładając, że nie chcesz ograniczać zwracanych wierszy, ponieważ agregujesz również inne wartości, możesz to zrobić w następujący sposób:
Powiedzmy, że w tej samej kolumnie, w której masz wartości Menedżera, Przełożonego i Kierownika zespołu, możesz uzyskać liczby takich jak poniżej:
źródło
else
części, wystarczyend
ją zaraz po1
.else
ponieważ lepiej dokumentuje wyniki instrukcji case, szczególnie dla początkujących programistów SQL. Dla zwięzłości można go w tym przypadku usunąć.Odpowiedź @ Guffa jest doskonała, po prostu zwróć uwagę, że może jest czystsza dzięki stwierdzeniu IF
źródło
Zależy, co masz na myśli, ale inna interpretacja znaczenia polega na tym, że chcesz liczyć wiersze o określonej wartości, ale nie chcesz ograniczać
SELECT
do TYLKO tych wierszy ...Zrobiłbyś to używając
SUM()
klauzuli w, takiej jak ta zamiast używaniaCOUNT()
: npźródło
Możesz także użyć słowa kluczowego przestawnego, jeśli używasz SQL 2005 lub nowszego
więcej informacji i od Technet
Zestaw danych testowych
źródło
Masz na myśli tylko to:
Jeśli tak, to działa!
źródło
Wiem, że to naprawdę stare, ale podoba mi się
NULLIF
sztuczka w takich scenariuszach i jak dotąd nie znalazłem żadnych wad. Zobacz mój przykład do skopiowania i wklejenia, który nie jest zbyt praktyczny, ale pokazuje, jak go używać.NULLIF
może mieć niewielki negatywny wpływ na wydajność, ale myślę, że nadal powinno być szybsze niż podzapytania.Komentarze mile widziane :-)
źródło
źródło
Myślę, że możesz użyć prostej klauzuli WHERE, aby wybrać tylko policz rekord.
źródło
Oto, co zrobiłem, aby uzyskać zestaw danych zawierający zarówno sumę, jak i liczbę spełniającą kryteria, w każdym kontenerze wysyłkowym. To pozwala mi odpowiedzieć na pytanie „Ile kontenerów zawiera więcej niż X% produktów powyżej rozmiaru 51”
źródło
Uwaga w przypadku PrestoDB SQL (z Facebooka) istnieje skrót:
https://prestodb.io/docs/current/functions/aggregate.html
źródło
Korzystając z tego, otrzymasz liczbę menedżerów
źródło