Heim >Datenbank >MySQL-Tutorial >Wie führe ich eine bedingte Zählung in SQL Server ohne COUNTIF durch?

Wie führe ich eine bedingte Zählung in SQL Server ohne COUNTIF durch?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-11 12:56:47824Durchsuche

How to Perform Conditional Counting in SQL Server Without COUNTIF?

Bedingtes Zählen in SQL Server: Ein CASE-basierter Ansatz

Aggregatfunktionen sind für die Datenanalyse in SQL Server unerlässlich. Während COUNT eine Gesamtzeilenanzahl liefert, erfordert die bedingte Zählung eine andere Strategie. In SQL Server fehlt ein direktes COUNTIF-Äquivalent, aber wir können das gleiche Ergebnis mit SUM und CASE erzielen.

Stellen Sie sich vor, Sie müssten den Prozentsatz der Zeilen berechnen, in denen MyColumn gleich „1“ ist. Ein naiver Versuch könnte so aussehen:

<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>

Die COUNTIF-Funktion ist keine Standard-SQL-Server-Funktion. Die Lösung liegt in der Nutzung von SUM und 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>

Die CASE-Anweisung überprüft das MyColumn jeder Zeile. Wenn es „1“ ist, wird 1 zurückgegeben. Andernfalls wird 0 zurückgegeben. SUM summiert dann diese Einsen und Nullen und zählt effektiv die Vorkommen von „1“ in MyColumn. Dies ermöglicht eine genaue bedingte Zählung und ermöglicht präzise Berechnungen und aufschlussreiche Datenanalysen.

Das obige ist der detaillierte Inhalt vonWie führe ich eine bedingte Zählung in SQL Server ohne COUNTIF durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn