- 카테고리:
반정형 및 정형 데이터 함수 (상위 순위)
FILTER¶
Lambda 식의 논리에 따라 배열 을 필터링합니다.
구문¶
FILTER( <array> , <lambda_expression> )
인자¶
array
필터링할 요소가 포함된 배열입니다. 배열은 반정형 또는 정형일 수 있습니다.
lambda_expression
각 배열 요소의 필터 조건을 정의하는 Lambda 식 입니다.
다음 구문에서는 Lambda 식에 1개의 인자만 지정해야 합니다.
<arg> [ <datatype> ] -> <expr>
반환¶
이 함수의 반환 유형은 입력 배열과 동일한 유형의 배열입니다. 반환된 배열에는 필터 조건이 TRUE를 반환하는 요소가 포함되어 있습니다.
두 인자 중 하나가 NULL이면 함수는 오류를 보고하지 않고 NULL을 반환합니다.
사용법 노트¶
Lambda 인자의 데이터 타입이 명시적으로 지정된 경우, Lambda를 호출하기 전에 배열 요소가 지정된 형식으로 강제 변환됩니다. 강제 변환에 대한 자세한 내용은 데이터 타입 변환 섹션을 참조하십시오.
필터 조건이 NULL로 평가되면 해당 배열 요소가 필터링됩니다.
예¶
다음 예제에서는 FILTER 함수를 사용합니다.
값보다 큰 배열 요소에 대한 필터¶
FILTER 함수를 사용하여 50보다 큰 값을 가진 배열의 오브젝트를 반환합니다.
SELECT FILTER(
[
{'name':'Pat', 'value': 50},
{'name':'Terry', 'value': 75},
{'name':'Dana', 'value': 25}
],
a -> a:value >= 50) AS "Filter >= 50";
+----------------------+
| Filter >= 50 |
|----------------------|
| [ |
| { |
| "name": "Pat", |
| "value": 50 |
| }, |
| { |
| "name": "Terry", |
| "value": 75 |
| } |
| ] |
+----------------------+
NULL이 아닌 배열 요소를 필터링¶
FILTER 함수를 사용하여 NULL이 아닌 배열 요소를 반환합니다.
SELECT FILTER([1, NULL, 3, 5, NULL], a -> a IS NOT NULL) AS "Not NULL Elements";
+-------------------+
| Not NULL Elements |
|-------------------|
| [ |
| 1, |
| 3, |
| 5 |
| ] |
+-------------------+
값보다 크거나 같은 테이블의 배열 요소를 필터링합니다.¶
열이 order_id
, order_date
, order_detail
인 이름이 orders
인 테이블이 있다고 가정해 보겠습니다. order_detail
열은 품목, 구매 수량, 소계로 구성된 배열입니다. 테이블에는 두 행의 데이터가 있습니다. 다음 SQL 문은 이 테이블을 생성하고 행을 삽입합니다.
CREATE OR REPLACE TABLE orders AS
SELECT 1 AS order_id, '2024-01-01' AS order_date, [
{'item':'UHD Monitor', 'quantity':3, 'subtotal':1500},
{'item':'Business Printer', 'quantity':1, 'subtotal':1200}
] AS order_detail
UNION SELECT 2 AS order_id, '2024-01-02' AS order_date, [
{'item':'Laptop', 'quantity':5, 'subtotal':7500},
{'item':'Noise-canceling Headphones', 'quantity':5, 'subtotal':1000}
] AS order_detail;
SELECT * FROM orders;
+----------+------------+-------------------------------------------+
| ORDER_ID | ORDER_DATE | ORDER_DETAIL |
|----------+------------+-------------------------------------------|
| 1 | 2024-01-01 | [ |
| | | { |
| | | "item": "UHD Monitor", |
| | | "quantity": 3, |
| | | "subtotal": 1500 |
| | | }, |
| | | { |
| | | "item": "Business Printer", |
| | | "quantity": 1, |
| | | "subtotal": 1200 |
| | | } |
| | | ] |
| 2 | 2024-01-02 | [ |
| | | { |
| | | "item": "Laptop", |
| | | "quantity": 5, |
| | | "subtotal": 7500 |
| | | }, |
| | | { |
| | | "item": "Noise-canceling Headphones", |
| | | "quantity": 5, |
| | | "subtotal": 1000 |
| | | } |
| | | ] |
+----------+------------+-------------------------------------------+
FILTER 함수를 사용하여 소계가 1500보다 크거나 같은 주문을 반환합니다.
SELECT order_id,
order_date,
FILTER(o.order_detail, i -> i:subtotal >= 1500) ORDER_DETAIL_GT_EQUAL_1500
FROM orders o;
+----------+------------+----------------------------+
| ORDER_ID | ORDER_DATE | ORDER_DETAIL_GT_EQUAL_1500 |
|----------+------------+----------------------------|
| 1 | 2024-01-01 | [ |
| | | { |
| | | "item": "UHD Monitor", |
| | | "quantity": 3, |
| | | "subtotal": 1500 |
| | | } |
| | | ] |
| 2 | 2024-01-02 | [ |
| | | { |
| | | "item": "Laptop", |
| | | "quantity": 5, |
| | | "subtotal": 7500 |
| | | } |
| | | ] |
+----------+------------+----------------------------+