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?

MAX

指定された列内の最大データ値を返す集約関数です。

Synopsis

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

引数

ALL オプション — すべての値に集約関数を適用します。ALL は、MAX によって返される値に影響を与えません。これは、SQL-92 の互換性のために用意されたものです。
DISTINCT オプション — それぞれの一意な値が考慮されるように指定する DISTINCT 節。DISTINCT は、MAX によって返される値に影響を与えません。これは、SQL-92 の互換性のために用意されたものです。
expression 任意の有効な式。通常、最大値が返される値を持つ列の名前。
%FOREACH(col-list) オプション — 列名、またはコンマで区切られた列名のリスト。%FOREACH の詳細は、"SELECT" を参照してください。
%AFTERHAVING オプションHAVING 節にある条件を適用します。

概要

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

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

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

その他の大半の集約関数と同様に、MAXストリーム・フィールドに適用できません。これを実行しようとすると、SQLCODE -37 エラーが生成されます。

その他の大半の集約関数とは異なり、MAX(DISTINCT BY(col2) col1) を含めて、ALL および DISTINCT キーワードは MAX 内で何も実行しません。これらは、SQL–92 の互換性のために用意されたものです。

データ値

MAX によって使用される指定されたフィールドは、数値または非数値です。数値データ型フィールドの場合、最大値は最も大きな数値として定義されます。したがって -3 の方が -7 よりも大きくなります。非数値データ型フィールドの場合、最大値は文字列の照合順で最も大きな値として定義されます。したがって '-7' の方が '-3' よりも大きくなります。

空文字列 ('') 値は CHAR(0) として処理されます。

述語では、フィールドに対して定義された照合タイプが使用されます。既定では、文字列データ型フィールドは大文字と小文字が区別されない SQLUPPER 照合で定義されます。現在のネームスペースにおける既定の文字列の照合の定義およびフィールド/プロパティの定義における既定以外のフィールドの照合タイプの指定の詳細は、"Caché SQL の使用法" の “照合” の章を参照してください。

フィールドの定義済み照合タイプが SQLUPPER である場合、MAX は文字列をすべて大文字で返します。したがって、SELECT MAX(Name) は、データの元の大文字/小文字に関係なく 'ZWIG' を返します。ただし、比較は大文字の照合を使用して行われるため、HAVING Name=MAX(Name) 節では、'Zwig'、'ZWIG'、および 'zwig' の Name 値が含まれる行が選択されます。

数値の場合、返される小数桁数は、expression の小数桁数と同じになります。

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

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

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

以下のクエリは、Sample.Employee データベース内の最高 (最大) 給与額を返します。

SELECT '$' || MAX(Salary) As TopSalary
     FROM Sample.Employee

以下のクエリは、給与額が $25,000 より少ない従業員が 1 人以上存在する州ごとに行を 1 つ返します。この行には、%AFTERHAVING キーワードを使用して給与額が $25,000 より少ない従業員の最大給与額を返し、さらにその州の全従業員の最小給与額と最大給与額を返します。

SELECT Home_State,
       '$' || MAX(Salary %AFTERHAVING) AS MaxSalaryBelow25K,
       '$' || MIN(Salary) AS MinSalary,
       '$' || MAX(Salary) AS MaxSalary
          FROM Sample.Employee
     GROUP BY Home_State
     HAVING Salary < 25000
     ORDER BY Home_State

以下のクエリは、Sample.Employee データベース内で検出された照合順の最低 (最小) および最高 (最大) の名前を返します。

SELECT Name,MIN(Name),MAX(Name)
     FROM Sample.Employee

MIN および MAX は、比較する前に Name の値を大文字に変換します。

以下のクエリは、Sample.Employee データベース内の Home_State が 'VT' である従業員の最高 (最大) 給与額を返します。

SELECT MAX(Salary)
     FROM Sample.Employee
     WHERE Home_State = 'VT'

以下のクエリは、Sample.Employee データベース内の Home_State ごとに、従業員数および最高 (最大) の従業員給与額を返します。

SELECT Home_State, 
     COUNT(Home_State) As NumEmployees, 
     MAX(Salary) As TopSalary
     FROM Sample.Employee
     GROUP BY Home_State
     ORDER BY TopSalary

関連項目

FeedbackOpens in a new tab