From 113ce8c7574f3e8348cf3ba7981e9a837460ff8b Mon Sep 17 00:00:00 2001 From: Denny Crane Date: Mon, 5 Jun 2023 16:43:07 -0300 Subject: [PATCH] Update argmin.md --- .../aggregate-functions/reference/argmin.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/docs/en/sql-reference/aggregate-functions/reference/argmin.md b/docs/en/sql-reference/aggregate-functions/reference/argmin.md index a7c21e3f15b..7972bdf84b8 100644 --- a/docs/en/sql-reference/aggregate-functions/reference/argmin.md +++ b/docs/en/sql-reference/aggregate-functions/reference/argmin.md @@ -6,6 +6,7 @@ sidebar_position: 105 # argMin Calculates the `arg` value for a minimum `val` value. If there are several different values of `arg` for minimum values of `val`, returns the first of these values encountered. +Both parts the `arg` and the `min` behave as [aggregate functions](../aggregate-functions/index.md), they both [skip `Null`](../aggregate-functions/index.md#null-processing) during processing and return not-Null values if not-Null values are available. **Syntax** @@ -49,3 +50,65 @@ Result: │ worker │ └──────────────────────┘ ``` + +**Extended example** + +```sql +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 because it the first not-Null value, min(b) is from another row! +└──────────────┴────────┘ + +select argMin(tuple(a), b) from test; +┌─argMin(tuple(a), b)─┐ +│ (NULL) │ -- Tuple allows to get Null value. +└─────────────────────┘ + +select (argMin((a, b), b) as t).1 argMinA, t.2 argMinB from test; +┌─argMinA─┬─argMinB─┐ +│ ᴺᵁᴸᴸ │ 0 │ -- you can use Tuple and get both (all - tuple(*) ) columns for the according max(b) +└─────────┴─────────┘ + +select argMin(a, b), min(b) from test where a is Null and b is Null; +┌─argMin(a, b)─┬─min(b)─┐ +│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ -- Nulls are not skipped because only Null values are available +└──────────────┴────────┘ + +select argMin(a, (b, a)), min(tuple(b, a)) from test; +┌─argMin(a, tuple(b, a))─┬─min(tuple(b, a))─┐ +│ d │ (NULL,NULL) │ 'd' is the first Not null value for the min +└────────────────────────┴──────────────────┘ + +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) │ +└──────────────────────────────────┴──────────────────┘ + +select argMin(a, tuple(b)) from test; +┌─argMax(a, tuple(b))─┐ +│ b │ -- Tuple can be used in `Min` to not skip Nulls in `Min` +└─────────────────────┘ +``` + +**See also** + +- [Tuple](../../data-types/tuple.md)