يمكن تطبيق المُركِّبين Array وIf على الدالة uniq
لاحتساب عدد القيم الفريدة في المصفوفات ضمن الصفوف التي يكون فيها
الشرط true، وذلك باستخدام دالة المُركِّب التجميعي uniqArrayIf.
-يمكن الجمع بين -If و-Array. لكن يجب أن يأتي Array أولًا، ثم If.
يفيد ذلك عندما تريد احتساب العناصر الفريدة في مصفوفة بناءً على
شروط محددة من دون الحاجة إلى استخدام arrayJoin.
عدّ المنتجات الفريدة التي تمت مشاهدتها حسب نوع الشريحة ومستوى التفاعل
في هذا المثال، سنستخدم جدولًا يتضمن بيانات جلسات تسوّق المستخدمين لعدّ
عدد المنتجات الفريدة التي شاهدها مستخدمون ضمن شريحة محددة، مع اعتماد
مقياس التفاعل المتمثل في الوقت الذي قضوه في الجلسة.
CREATE TABLE user_shopping_sessions
(
session_date Date,
user_segment String,
viewed_products Array(String),
session_duration_minutes Int32
) ENGINE = Memory;
INSERT INTO user_shopping_sessions VALUES
('2024-01-01', 'new_customer', ['smartphone_x', 'headphones_y', 'smartphone_x'], 12),
('2024-01-01', 'returning', ['laptop_z', 'smartphone_x', 'tablet_a'], 25),
('2024-01-01', 'new_customer', ['smartwatch_b', 'headphones_y', 'fitness_tracker'], 8),
('2024-01-02', 'returning', ['laptop_z', 'external_drive', 'laptop_z'], 30),
('2024-01-02', 'new_customer', ['tablet_a', 'keyboard_c', 'tablet_a'], 15),
('2024-01-02', 'premium', ['smartphone_x', 'smartwatch_b', 'headphones_y'], 22);
-- Count unique products viewed by segment type and engagement level
SELECT
session_date,
-- Count unique products viewed in long sessions by new customers
uniqArrayIf(viewed_products, user_segment = 'new_customer' AND session_duration_minutes > 10) AS new_customer_engaged_products,
-- Count unique products viewed by returning customers
uniqArrayIf(viewed_products, user_segment = 'returning') AS returning_customer_products,
-- Count unique products viewed across all sessions
uniqArray(viewed_products) AS total_unique_products
FROM user_shopping_sessions
GROUP BY session_date
ORDER BY session_date
FORMAT Vertical;
Row 1:
──────
session_date: 2024-01-01
new_customer⋯ed_products: 2
returning_customer_products: 3
total_unique_products: 6
Row 2:
──────
session_date: 2024-01-02
new_customer⋯ed_products: 2
returning_customer_products: 2
total_unique_products: 7