ClickHouse/docs/en/sql-reference/aggregate-functions/reference/first_value.md

84 lines
2.0 KiB
Markdown
Raw Normal View History

2023-02-16 08:58:46 +00:00
---
slug: /en/sql-reference/aggregate-functions/reference/first_value
sidebar_position: 7
---
# first_value
2023-11-27 22:29:03 +00:00
It is an alias for [`any`](../../../sql-reference/aggregate-functions/reference/any.md) but it was introduced for compatibility with [Window Functions](../../window-functions/index.md), where sometimes it's necessary to process `NULL` values (by default all ClickHouse aggregate functions ignore NULL values).
It supports declaring a modifier to respect nulls (`RESPECT NULLS`), both under [Window Functions](../../window-functions/index.md) and in normal aggregations.
As with `any`, without Window Functions the result will be random if the source stream is not ordered and the return type
matches the input type (Null is only returned if the input is Nullable or -OrNull combinator is added).
2023-02-16 08:58:46 +00:00
## examples
2023-04-19 11:22:36 +00:00
```sql
2023-06-04 20:31:12 +00:00
CREATE TABLE test_data
(
a Int64,
b Nullable(Int64)
)
ENGINE = Memory;
2023-06-04 20:34:46 +00:00
INSERT INTO test_data (a, b) Values (1,null), (2,3), (4, 5), (6,null);
2023-02-16 08:58:46 +00:00
```
### example1
By default, the NULL value is ignored.
2023-02-16 08:58:46 +00:00
```sql
2023-06-04 20:31:12 +00:00
select first_value(b) from test_data;
2023-02-16 08:58:46 +00:00
```
```text
┌─any(b)─┐
│ 3 │
└────────┘
2023-02-16 08:58:46 +00:00
```
### example2
The NULL value is ignored.
```sql
select first_value(b) ignore nulls from test_data
2023-02-16 08:58:46 +00:00
```
```text
┌─any(b) IGNORE NULLS ─┐
│ 3 │
└──────────────────────┘
2023-02-16 08:58:46 +00:00
```
### example3
The NULL value is accepted.
```sql
select first_value(b) respect nulls from test_data
2023-02-16 08:58:46 +00:00
```
```text
┌─any(b) RESPECT NULLS ─┐
│ ᴺᵁᴸᴸ │
└───────────────────────┘
2023-02-16 08:58:46 +00:00
```
2023-06-04 20:31:12 +00:00
### example4
Stabilized result using the sub-query with `ORDER BY`.
```sql
SELECT
first_value_respect_nulls(b),
first_value(b)
FROM
(
SELECT *
FROM test_data
ORDER BY a ASC
)
```
```text
┌─any_respect_nulls(b)─┬─any(b)─┐
│ ᴺᵁᴸᴸ │ 3 │
└──────────────────────┴────────┘
2023-06-04 20:31:12 +00:00
```
2023-02-16 08:58:46 +00:00