1. ホーム
  2. sql

[解決済み] Sql Server の COUNTIF 集約関数に相当するもの

2022-03-06 20:06:17

質問

でクエリを作成しています。 GROUP BY 節があり、特定の条件に基づいてレコードを数える機能が必要です (例えば、特定のカラム値が 1 に等しいレコードのみを数える)。

SELECT  UID, 
        COUNT(UID) AS TotalRecords, 
        SUM(ContractDollars) AS ContractDollars,
        (COUNTIF(MyColumn, 1) / COUNT(UID) * 100) -- Get the average of all records that are 1
FROM    dbo.AD_CurrentView
GROUP BY UID
HAVING  SUM(ContractDollars) >= 500000

COUNTIF() というネイティブなSQL関数がないので、明らかに失敗しています。 COUNTIF しかし、ここでのアイデアは、MyColumn の値が '1' であるすべての行のパーセンテージを決定することです。

MS SQL 2005 環境でこれを適切に実装する方法について、何かお考えがありますか?

どのように解決するのですか?

を使用することができます。 SUM (ただし COUNT を組み合わせたものです。 CASE ステートメントを、このように使用します。

SELECT SUM(CASE WHEN myColumn=1 THEN 1 ELSE 0 END)
FROM AD_CurrentView

注:私自身のテストでは NULL は問題ありませんでしたが、これは環境に依存する可能性があります。などのNULLを処理することができます。

SELECT SUM(CASE WHEN ISNULL(myColumn,0)=1 THEN 1 ELSE 0 END)
FROM AD_CurrentView