Apakah mungkin untuk menentukan kondisi dalam Count()
? Saya ingin menghitung hanya baris yang memiliki, misalnya, "Manajer" di kolom Posisi.
Saya ingin melakukannya dalam pernyataan hitungan, tidak menggunakan WHERE
; Aku bertanya tentang hal itu karena saya perlu untuk menghitung Manajer dan lain di sama SELECT
(seperti Count(Position = Manager), Count(Position = Other))
jadi WHERE
ada gunanya bagi saya dalam contoh ini.
sql
sql-server
tsql
agnieszka
sumber
sumber
SELECT *
, tetapiSELECT COUNT(*)
, yang merupakan binatang yang sama sekali berbeda.Jawaban:
Jika Anda tidak bisa membatasi kueri itu sendiri dengan
where
klausa, Anda bisa menggunakan fakta bahwacount
agregat hanya menghitung nilai-nilai non-nol:Anda juga dapat menggunakan
sum
agregat dengan cara yang sama:sumber
null
spesial. Gunakancase when IntegerField is null then ...
SUM(CONVERT(int, IsManager))
else null
forcase
, jadicount()
contohnya bisa 10 karakter lebih pendek (jika Anda menghitung spasi).Dengan asumsi Anda tidak ingin membatasi baris yang dikembalikan karena Anda mengumpulkan nilai-nilai lain juga, Anda bisa melakukannya seperti ini:
Katakanlah dalam kolom yang sama Anda memiliki nilai Manajer, Pengawas, dan Pemimpin Tim, Anda bisa mendapatkan hitungan masing-masing seperti ini:
sumber
else
bagian, hanyaend
setelah1
.else
karena lebih baik mendokumentasikan hasil dari pernyataan kasus, terutama untuk pengembang SQL novie. Untuk singkatnya, dapat dihapus dalam kasus ini.@Guffa jawaban sangat bagus, hanya tunjukkan bahwa mungkin lebih bersih dengan pernyataan IF
sumber
Tergantung apa yang Anda maksud, tetapi interpretasi lain dari artinya adalah di mana Anda ingin menghitung baris dengan nilai tertentu, tetapi tidak ingin membatasi
SELECT
untuk HANYA baris itu ...Anda akan melakukannya menggunakan
SUM()
klausa, seperti ini alih-alih menggunakanCOUNT()
: missumber
Anda juga dapat menggunakan Kata Kunci Pivot jika Anda menggunakan SQL 2005 atau lebih tinggi
info lebih lanjut dan dari Technet
Kumpulan Data Uji
sumber
Apakah maksud Anda hanya ini:
Jika demikian, maka ya berhasil!
sumber
Saya tahu ini benar-benar tua, tapi saya suka
NULLIF
trik untuk skenario seperti itu, dan sejauh ini saya tidak menemukan kelemahan. Lihat saja contoh copy & paste saya, yang sebenarnya tidak terlalu praktis, tetapi menunjukkan cara menggunakannya.NULLIF
mungkin memberi Anda dampak negatif kecil pada kinerja, tapi saya kira itu masih harus lebih cepat daripada subqueries.Komentar dihargai :-)
sumber
sumber
Saya pikir Anda dapat menggunakan klausa WHERE sederhana untuk memilih hanya menghitung beberapa catatan.
sumber
Berikut adalah apa yang saya lakukan untuk mendapatkan kumpulan data yang mencakup total dan jumlah yang memenuhi kriteria, dalam setiap kontainer pengiriman. Biarkan saya menjawab pertanyaan "Berapa banyak kontainer pengiriman yang memiliki lebih dari X% item di atas ukuran 51"
sumber
Catatan dengan PrestoDB SQL (dari Facebook), ada jalan pintas:
https://prestodb.io/docs/current/functions/aggregate.html
sumber
Dengan ini Anda akan mendapatkan hitungan untuk manajer
sumber