설명
If 조합자는 argMin
함수에 적용할 수 있으며, argMinIf 집계 조합자 함수를 사용하면 조건이 참인 행에 대해
val의 최솟값에 대응하는 arg 값을 찾을 수 있습니다.
argMinIf 함수는 데이터셋에서 최솟값에 해당하는 값을 찾아야 하지만, 특정
조건을 만족하는 행에 대해서만 찾아야 할 때 유용합니다.
사용 예시
이 예시에서는 제품 가격과 해당 타임스탬프를 저장하는 테이블을 생성하고,
재고가 있는 경우 각 제품의 최저 가격을 찾기 위해 argMinIf를 사용합니다.
CREATE TABLE product_prices(
product_id UInt32,
price Decimal(10,2),
timestamp DateTime,
in_stock UInt8
) ENGINE = MergeTree
ORDER BY ();
INSERT INTO product_prices VALUES
(1, 10.99, '2024-01-01 10:00:00', 1),
(1, 9.99, '2024-01-01 10:05:00', 1),
(1, 11.99, '2024-01-01 10:10:00', 0),
(2, 20.99, '2024-01-01 11:00:00', 1),
(2, 19.99, '2024-01-01 11:05:00', 1),
(2, 21.99, '2024-01-01 11:10:00', 1);
SELECT
product_id,
argMinIf(price, timestamp, in_stock = 1) AS lowest_price_when_in_stock
FROM product_prices
GROUP BY product_id;argMinIf 함수는 각 제품별로 가장 이른 timestamp에 해당하는 가격을 찾되,
in_stock = 1인 행만 대상으로 합니다. 예시:
- 제품 1: 재고가 있는 행 중에서는 10.99의 timestamp(10:00:00)가 가장 이릅니다
- 제품 2: 재고가 있는 행 중에서는 20.99의 timestamp(11:00:00)가 가장 이릅니다
┌─product_id─┬─lowest_price_when_in_stock─┐
1. │ 1 │ 10.99 │
2. │ 2 │ 20.99 │
└────────────┴────────────────────────────┘