Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melakukan Pengiraan Bersyarat dalam SQL Server Tanpa COUNTIF?

Bagaimana untuk Melakukan Pengiraan Bersyarat dalam SQL Server Tanpa COUNTIF?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-11 12:56:47796semak imbas

How to Perform Conditional Counting in SQL Server Without COUNTIF?

Pengiraan Bersyarat Pelayan SQL: Pendekatan Berasaskan KES

Fungsi agregat adalah penting untuk analisis data dalam SQL Server. Walaupun COUNT memberikan jumlah kiraan baris, pengiraan bersyarat memerlukan strategi yang berbeza. SQL Server tidak mempunyai persamaan COUNTIF langsung, tetapi kita boleh mencapai hasil yang sama menggunakan SUM dan CASE.

Bayangkan anda perlu mengira peratusan baris dengan MyColumn sama dengan '1'. Percubaan naif mungkin kelihatan seperti ini:

<code class="language-sql">SELECT  UID, 
        COUNT(UID) AS TotalRecords, 
        SUM(ContractDollars) AS ContractDollars,
        (COUNTIF(MyColumn, 1) / COUNT(UID) * 100) -- Incorrect: COUNTIF not supported
FROM    dbo.AD_CurrentView
GROUP BY UID
HAVING  SUM(ContractDollars) >= 500000</code>

Fungsi COUNTIF bukan fungsi SQL Server standard. Penyelesaiannya terletak pada memanfaatkan SUM dan CASE:

<code class="language-sql">SELECT  UID, 
        COUNT(UID) AS TotalRecords, 
        SUM(ContractDollars) AS ContractDollars,
        (SUM(CASE WHEN MyColumn = 1 THEN 1 ELSE 0 END) / COUNT(UID) * 100) -- Correct conditional count
FROM    dbo.AD_CurrentView
GROUP BY UID
HAVING  SUM(ContractDollars) >= 500000</code>

Pernyataan CASE menyemak MyColumn setiap baris. Jika '1', ia mengembalikan 1; jika tidak, ia mengembalikan 0. SUM kemudian menjumlahkan 1 dan 0 ini, dengan berkesan mengira kejadian '1' dalam MyColumn. Ini memberikan kiraan bersyarat yang tepat, membolehkan pengiraan tepat dan analisis data yang berwawasan.

Atas ialah kandungan terperinci Bagaimana untuk Melakukan Pengiraan Bersyarat dalam SQL Server Tanpa COUNTIF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn