Упростить запрос Clickhouse

есть таблица search

date, user_id ad_id search_text, action

которая хранит в себе действия(action, к примеру 'view' или 'click') юзеров(user_id) к постам(post_id) после поиска по строке search_text в поисковой системе в конкретную дату(date) Нужно посчитать:

  1. Количество уникальных постов, которые были просмотрены в конкретную дату за конкретным search_text
  2. Максимальное количество постов, просмотренное одним юзером в конкретную дату за конкретным search_text

Запрос для 1):

SELECT data, search_text, COUNT(distinct post_id)
FROM search
WHERE action = 'view'
GROUPBY data, search_text

Запрос для 2):

SELECT data, search_text, MAX(views_per_user) as max_views_per_user
FROM
(
SELECT data, search_text, COUNT(distinct post_id) as max_views_per_user
FROM search
WHERE action = 'view'
GROUPBY data, search_text, user_id
)

Хочу написать всё одним запросом:

SELECT first.data, first.search_text, first.unique_posts_viewed, second. max_views_per_user
FROM
(
SELECT data, search_text, COUNT(distinct post_id) as unique_posts_viewed
FROM search
WHERE action = 'view'
GROUPBY data, search_text
) as first
LEFT JOIN
(
SELECT data, search_text, MAX(views_per_user) as views_per_user
FROM
(
SELECT data, search_text, COUNT(distinct post_id) as max_views_per_user
FROM search
WHERE action = 'view'
GROUPBY data, search_text, user_id
))
as second
) ON first.data = second.data and first.search_text = second.search_text

Можно ли как-то упростить этот запрос, использую особенности clickhouse? Возможно без left joina. Пробовал писать через correlated query, потом узнал что для clickhouse нету такой фичи.


Ответы (0 шт):