Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

SUM

指定の列の値の合計値を返す、集約関数です。

Synopsis

SUM([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

引数

ALL オプションSUMexpression のすべての値の合計を返すように指定します。キーワードが指定されていない場合は、これが既定になります。
DISTINCT オプションSUMexpression の個別 (一意) の値の合計を返すように指定する DISTINCT 節。DISTINCT で BY(col-list) 従属節を指定できます。col-list には 1 つのフィールド、またはコンマ区切りのフィールドのリストを指定できます。
expression 任意の有効な式。普通は、合計値算出の対象となるデータ値を含む列の名前を指定します。
%FOREACH(col-list) オプション — 列名、またはコンマで区切られた列名のリスト。%FOREACH の詳細は、"SELECT" を参照してください。
%AFTERHAVING オプションHAVING 節にある条件を適用します。

概要

SUM 集約関数は、expression の値の合計を返します。一般的に expression は、クエリで返される複数行の中のフィールド名 (または、フィールド名を 1 つ以上含む式) です。

SUM は、テーブルまたはビューを参照する SELECT クエリやサブクエリで使用できます。SUM は、一般のフィールド値と共に SELECT リストや HAVING 節で使用できます。

SUM は、WHERE 節では使用できません。SELECT がサブクエリの場合を除いて、JOINON 節では、SUM を使用できません。

SUM は、すべての集約関数と同様に、オプションの DISTINCT 節を取ることができます。SUM(DISTINCT col1) は、これらの個別 (一意) の col1 フィールド値のみの合計値を計算します。SUM(DISTINCT BY(col2) col1) は、col2 値が個別 (一意) であるレコードのこれらの col1 フィールド値のみの合計値を計算します。ただし、個別の col2 値には、個別値として NULL が 1 つ含まれる場合があります。

データ値

SUM は、データ型が INT、SMALLINT、または TINYINT の expression に対して、データ型 INTEGER を返します。SUM は、データ型が BIGINT の expression に対して、データ型 BIGINT を返します。SUM は、データ型が DOUBLE の expression に対して、データ型 DOUBLE を返します。他のすべての数値データ型に対して、SUM はデータ型 NUMERIC を返します。

SUM は、有効桁数が 18 の値を返します。返り値の小数桁数は expression の小数桁数と同じですが、以下の例外があります。expression が数値で、そのデータ型が VARCHAR または VARBINARY の場合、返り値の小数桁数は 8 になります。

既定では、集約関数は Display 値ではなく、Logical (内部) データ値を使用します。

通常、SUM は数値を含むフィールドまたは式に適用されます。タイプ・チェックはごくわずかしか実行されないため、(ほとんど意味はありませんが) 非数値フィールドに対して実行できます。SUM では、空文字列 (") のように数値でない値はゼロ (0) として扱われます。expression のデータ型が VARCHAR の場合、ODBC または JDBC への返り値は DOUBLE データ型になります。

データ・フィールドの NULL 値は、SUM 集約関数値を得る場合は無視されます。クエリから行が返されない場合や、すべての行のデータ・フィールド値が NULL の場合、SUM は NULL を返します。

最適化

SUM 計算の SQL 最適化では、ビットスライス・インデックスがフィールドに定義されている場合、それを使用することができます。

現在のトランザクションで発生する変更

すべての集約関数と同様に、SUM も必ず、現在のトランザクションの分離レベルに関係なく、コミットされていない変更も含めてデータの現在の状態を返します。詳細は、"SET TRANSACTION" および "START TRANSACTION" を参照してください。

以下の例では、Salary 金額にドル記号 ($) を連結します。

以下のクエリは、Sample.Employee データベースに記録されている全従業員の給与の合計を返します。

SELECT '$' || SUM(Salary) AS Total_Payroll
     FROM Sample.Employee

以下のクエリは、%AFTERHAVING を使用して、給与額が $80,000 より多い人が 1 人以上いる各州について、すべての給与額の合計と $80,000 を超える給与額の合計を返します。

SELECT Home_State,
       '$' || SUM(Salary) AS Total_Payroll,
       '$' || SUM(Salary %AFTERHAVING) AS Exec_Payroll
     FROM Sample.Employee
     GROUP BY Home_State
     HAVING Salary > 80000
     ORDER BY Home_State

以下のクエリは、Sample.Employee データベースに記録されている役職ごとの給与の合計と平均値を返します。

SELECT Title,
       '$' || SUM(Salary) AS Total,
       '$' || AVG(Salary) AS Average
     FROM Sample.Employee
     GROUP BY Title
     ORDER BY Average

以下のクエリは、算術式と共に使用される SUM を示しています。Sample.Employee データベースに記録されている各役職に対して、現在の給与の合計と支払いに 10% 増加した給与の合計を返します。

SELECT Title,
       '$' || SUM(Salary) AS BeforeRaises,
       '$' || SUM(Salary * 1.1) AS AfterRaises
     FROM Sample.Employee
     GROUP BY Title
     ORDER BY Title

以下のクエリは、CASE 文を使用して論理式と共に使用される SUM を示しています。すべての定額給従業員をカウントし、SUM を使用して $90,000 以上の所得があるすべての定額給従業員をカウントします。

SELECT COUNT(Salary) As AllPaid, 
       SUM(CASE WHEN (Salary >= 90000)
           THEN 1 ELSE 0 END) As TopPaid
       FROM Sample.Employee

関連項目

FeedbackOpens in a new tab