Описание
Комбинатор Array
можно применять к функции uniq,
чтобы вычислить приблизительное количество уникальных элементов во всех массивах
с помощью функции агрегатного комбинатора uniqArray.
Функция uniqArray полезна, когда нужно подсчитать уникальные элементы в
нескольких массивах набора данных. Она эквивалентна использованию uniq(arrayJoin()), где
arrayJoin сначала разворачивает массивы, а затем uniq подсчитывает уникальные элементы.
Пример использования
В этом примере мы используем набор данных с интересами пользователей по разным
категориям, чтобы показать, как работает uniqArray. Мы сравним его с
uniq(arrayJoin()), чтобы показать разницу в подсчёте уникальных элементов.
CREATE TABLE user_interests
(
user_id UInt32,
interests Array(String)
) ENGINE = Memory;
INSERT INTO user_interests VALUES
(1, ['reading', 'gaming', 'music']),
(2, ['gaming', 'sports', 'music']),
(3, ['reading', 'cooking']);
SELECT
uniqArray(interests) AS unique_interests_total,
uniq(arrayJoin(interests)) AS unique_interests_arrayJoin
FROM user_interests;Функция uniqArray подсчитывает количество уникальных элементов во всех массивах, взятых вместе, аналогично uniq(arrayJoin()).
В этом примере:
uniqArrayвозвращает 5, потому что у всех пользователей в совокупности 5 уникальных интересов: 'reading', 'gaming', 'music', 'sports', 'cooking'uniq(arrayJoin())тоже возвращает 5, показывая, что обе функции подсчитывают уникальные элементы по всем массивам
┌─unique_interests_total─┬─unique_interests_arrayJoin─┐
1. │ 5 │ 5 │
└────────────────────────┴────────────────────────────┘