概要
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 照合で定義されます。現在のネームスペースにおける既定の文字列の照合の定義およびフィールド/プロパティの定義における既定以外のフィールドの照合タイプの指定の詳細は、"InterSystems IRIS の使用法" の “照合” の章を参照してください。
フィールドの定義済み照合タイプが SQLUPPER である場合、MAX は文字列をすべて大文字で返します。したがって、SELECT MAX(Name) は、データの元の大文字/小文字に関係なく 'ZWIG' を返します。ただし、比較は大文字の照合を使用して行われるため、HAVING Name=MAX(Name) 節では、'Zwig'、'ZWIG'、および 'zwig' の Name 値が含まれる行が選択されます。
数値の場合、返される小数桁数は、expression の小数桁数と同じになります。
データ・フィールドの NULL 値は、MAX 集約関数値を得る場合は無視されます。クエリから行が返されない場合や、すべての行のデータ・フィールド値が NULL の場合、MAX は NULL を返します。
例
以下のクエリは、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