MIN
Synopsis
MIN([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])
引数
ALL | オプション — すべての値に集約関数を適用します。ALL は、MIN によって返される値に影響を与えません。これは、SQL-92 の互換性のために用意されたものです。 |
DISTINCT | オプション — それぞれの一意な値が考慮されるように指定します。DISTINCT は、MIN によって返される値に影響を与えません。これは、SQL-92 の互換性のために用意されたものです。 |
expression | 任意の有効な式。通常、最小値が返される値を持つ列の名前。 |
%FOREACH(col-list) | オプション — 列名、またはコンマで区切られた列名のリスト。%FOREACH の詳細は、"SELECT" を参照してください。 |
%AFTERHAVING | オプション — HAVING 節にある条件を適用します。 |
概要
MIN 集約関数は、expression の最小値を返します。一般的に expression は、クエリで返される複数行の中のフィールドの名前 (または、フィールド名を 1 つ以上含む式) です。
MIN は、テーブルまたはビューを参照する SELECT クエリまたは SELECT サブクエリで使用できます。MIN は、一般のフィールド値と共に SELECT リストや HAVING 節で表示できます。
MIN は、WHERE 節では使用できません。SELECT がサブクエリの場合を除いて、JOIN の ON 節では MIN を使用できません。
その他の大半の集約関数と同様に、MIN はストリーム・フィールドに適用できません。これを実行しようとすると、SQLCODE -37 エラーが生成されます。
その他の大半の集約関数とは異なり、MIN(DISTINCT BY(col2) col1) を含めて、ALL および DISTINCT キーワードは MIN 内で何も実行しません。これらは、SQL–92 の互換性のために用意されたものです。
データ値
MIN によって使用される指定されたフィールドは、数値または非数値です。数値データ型フィールドの場合、最小値は最も小さな数値として定義されます。したがって -7 の方が -3 よりも小さくなります。非数値データ型フィールドの場合、最小値は文字列の照合順で最も小さな値として定義されます。したがって '-3' の方が '-7' よりも小さくなります。
空文字列 ('') 値は CHAR(0) として処理されます。
述語では、フィールドに対して定義された照合タイプが使用されます。既定では、文字列データ型フィールドは大文字と小文字が区別されない SQLUPPER 照合で定義されます。現在のネームスペースにおける既定の文字列の照合の定義およびフィールド/プロパティの定義における既定以外のフィールドの照合タイプの指定の詳細は、"Caché SQL の使用法" の “照合” の章を参照してください。
フィールドの定義済み照合タイプが SQLUPPER である場合、MIN は文字列をすべて大文字で返します。したがって、SELECT MIN(Name) は、データの元の大文字/小文字に関係なく 'AARON' を返します。ただし、比較は大文字の照合を使用して行われるため、HAVING Name=MIN(Name) 節では、'Aaron'、'AARON'、および 'aaron' の Name 値が含まれる行が選択されます。
数値の場合、返される小数桁数は、expression の小数桁数と同じになります。
データ・フィールドの NULL 値は、MIN 集約関数値を得る場合は無視されます。クエリから行が返されない場合や、すべての行に対するデータ・フィールド値が NULL の場合、MIN は NULL を返します。
現在のトランザクションで発生する変更
すべての集約関数と同様に、MIN も必ず、現在のトランザクションの分離レベルに関係なく、コミットされていない変更も含めてデータの現在の状態を返します。詳細は、"SET TRANSACTION" と "START TRANSACTION" を参照してください。
例
以下の例では、Salary 金額にドル記号 ($) を連結します。
以下のクエリは、Sample.Employee データベース内の最低 (最小) 給与額を返します。
SELECT '$' || MIN(Salary) AS LowSalary
FROM Sample.Employee
以下のクエリは、給与額が $75,000 より多い従業員が 1 人以上存在する州ごとに行を 1 つ返します。この行には、%AFTERHAVING キーワードを使用して給与額が $75,000 より多い従業員の最小給与額を返し、さらにその州の全従業員の最小給与額と最大給与額を返します。
SELECT Home_State,
'$' || MIN(Salary %AFTERHAVING) AS MinSalaryAbove75K,
'$' || MIN(Salary) AS MinSalary,
'$' || MAX(Salary) AS MaxSalary
FROM Sample.Employee
GROUP BY Home_State
HAVING Salary > 75000
ORDER BY MinSalaryAbove75K
以下のクエリは、Sample.Employee データベース内で検出された照合順の最低 (最小) および最高 (最大) の名前を返します。
SELECT Name,MIN(Name),MAX(Name)
FROM Sample.Employee
MIN および MAX は、比較する前に Name の値を大文字に変換します。
以下のクエリは、Sample.Employee データベース内の Home_State が VT である従業員の最低 (最小) 給与額を返します。
SELECT MIN(Salary)
FROM Sample.Employee
WHERE Home_State = 'VT'
以下のクエリは、Sample.Employee データベース内の Home_State ごとに、従業員数および最低 (最小) の従業員給与額を返します。
SELECT Home_State,
COUNT(Home_State) As NumEmployees,
MIN(Salary) As LowSalary
FROM Sample.Employee
GROUP BY Home_State
ORDER BY LowSalary