الانتقال إلى المحتوى الرئيسي

الوصف

يمكن تطبيق المُركِّب التجميعي If على الدالة argMin للعثور على قيمة arg المقابلة للقيمة الدنيا لـ val في الصفوف التي تكون فيها قيمة الشرط true، باستخدام دالة المُركِّب التجميعي 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 │
   └────────────┴────────────────────────────┘

انظر أيضًا

آخر تعديل في ٢٩ يونيو ٢٠٢٦