Skip to main content

argMin

val の最小値に対応する arg の値を計算します。最大となる val が同じ値を持つ複数の行がある場合、返される arg は非決定的です。argmin の両方は集計関数として動作し、処理中にNull をスキップしますNull でない値が利用可能な場合、Null でない値を返します。

構文

argMin(arg, val)

引数

  • arg — 引数。
  • val — 値。

戻り値

  • 最小の val 値に対応する arg 値。

型:arg の型と一致。

入力テーブル:

┌─user─────┬─salary─┐
│ director │ 5000 │
│ manager │ 3000 │
│ worker │ 1000 │
└──────────┴────────┘

クエリ:

SELECT argMin(user, salary) FROM salary

結果:

┌─argMin(user, salary)─┐
│ worker │
└──────────────────────┘

拡張例

CREATE TABLE test
(
a Nullable(String),
b Nullable(Int64)
)
ENGINE = Memory AS
SELECT *
FROM VALUES((NULL, 0), ('a', 1), ('b', 2), ('c', 2), (NULL, NULL), ('d', NULL));

select * from test;
┌─a────┬────b─┐
│ ᴺᵁᴸᴸ │ 0
│ a │ 1
│ b │ 2
│ c │ 2
│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │
│ d │ ᴺᵁᴸᴸ │
└──────┴──────┘

SELECT argMin(a, b), min(b) FROM test;
┌─argMin(a, b)─┬─min(b)─┐
│ a │ 0-- argMin = a は最初の `NULL` でない値であり、min(b) は別の行から来ています!
└──────────────┴────────┘

SELECT argMin(tuple(a), b) FROM test;
┌─argMin(tuple(a), b)─┐
(NULL)-- `Tuple` に含まれる唯一の `NULL` 値は `NULL` ではないので、集計関数はその `NULL` 値によってその行をスキップしません
└─────────────────────┘

SELECT (argMin((a, b), b) as t).1 argMinA, t.2 argMinB from test;
┌─argMinA─┬─argMinB─┐
│ ᴺᵁᴸᴸ │ 0-- `Tuple` を使用して、最大の b に対応するすべての (すなわち tuple(*)) カラムを取得できます
└─────────┴─────────┘

SELECT argMin(a, b), min(b) FROM test WHERE a IS NULL and b IS NULL;
┌─argMin(a, b)─┬─min(b)─┐
│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ -- すべての集約行はフィルターのために少なくとも1つの `NULL` 値を含むため、すべての行がスキップされ、その結果 `NULL` になります
└──────────────┴────────┘

SELECT argMin(a, (b, a)), min(tuple(b, a)) FROM test;
┌─argMin(a, tuple(b, a))─┬─min(tuple(b, a))─┐
│ d │ (NULL,NULL)-- 'd' は最小の `NULL` でない値です
└────────────────────────┴──────────────────┘

SELECT argMin((a, b), (b, a)), min(tuple(b, a)) FROM test;
┌─argMin(tuple(a, b), tuple(b, a))─┬─min(tuple(b, a))─┐
(NULL,NULL)(NULL,NULL)-- `Tuple` が `NULL` をスキップしないように許可するため、argMin は (NULL,NULL) を返し、min(tuple(b, a)) はこのデータセットの最小値になります
└──────────────────────────────────┴──────────────────┘

SELECT argMin(a, tuple(b)) FROM test;
┌─argMin(a, tuple(b))─┐
│ d │ -- `Tuple` は `NULL` な値を持つ行をスキップしないように `min` に使用できます。
└─────────────────────┘

参照