argMinIf 집계 함수 컴비네이터

argMinIf 집계 함수 컴비네이터

If 컴비네이터를 argMin 함수에 적용하면, 조건이 참인 행에서 val의 최소값에 해당하는 arg의 값을 찾을 수 있어요. argMinIf 집계 컴비네이터 함수를 사용하는 거예요. argMinIf 함수는 데이터셋에서 특정 조건을 만족하는 행에 대해서만 최소값과 연관된 값을 찾아야 할 때 유용해요.

출처: 문서

본문

예시 사용법

이 예시에서는 제품 가격과 타임스탬프를 저장하는 테이블을 만들고, argMinIf로 각 제품이 재고가 있을 때의 최저 가격을 찾아볼게요.

Query

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 함수는 각 제품에 대해 가장 이른 타임스탬프에 해당하는 가격을 찾지만, in_stock = 1인 행만 고려해요. 예를 들어:

  • 제품 1: 재고가 있는 행 중에서 10.99가 가장 이른 타임스탬프(10:00:00)를 가짐
  • 제품 2: 재고가 있는 행 중에서 20.99가 가장 이른 타임스탬프(11:00:00)를 가짐

Response

   ┌─product_id─┬─lowest_price_when_in_stock─┐
1. │          1 │                      10.99 │
2. │          2 │                      20.99 │
   └────────────┴────────────────────────────┘

더 알아보기 (Learn more)