Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

uniqArrayIf

Descripción

Los combinadores Array y If se pueden aplicar a la función uniq para contar la cantidad de valores únicos en arrays en las filas donde la condición es verdadera, mediante la función de combinador de agregado uniqArrayIf.

Esto resulta útil cuando quieres contar elementos únicos de un array según condiciones específicas sin tener que usar arrayJoin.

Ejemplo de uso

Contar los productos únicos vistos por tipo de segmento y nivel de interacción

En este ejemplo, usaremos una tabla con datos de sesiones de compra de usuarios para contar la cantidad de productos únicos vistos por usuarios de un segmento específico y con una métrica de interacción basada en el tiempo dedicado a la sesión.

Querysql
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);

-- Contar productos únicos vistos por tipo de segmento y nivel de participación
SELECT 
    session_date,
    -- Contar productos únicos vistos en sesiones largas por nuevos clientes
    uniqArrayIf(viewed_products, user_segment = 'new_customer' AND session_duration_minutes > 10) AS new_customer_engaged_products,
    -- Contar productos únicos vistos por clientes recurrentes
    uniqArrayIf(viewed_products, user_segment = 'returning') AS returning_customer_products,
    -- Contar productos únicos vistos en todas las sesiones
    uniqArray(viewed_products) AS total_unique_products
FROM user_shopping_sessions
GROUP BY session_date
ORDER BY session_date
FORMAT Vertical;
Responseresponse
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

Véase también

Navigation