Упростить запрос Clickhouse
есть таблица search
date, user_id ad_id search_text, action
которая хранит в себе действия(action, к примеру 'view' или 'click') юзеров(user_id) к постам(post_id) после поиска по строке search_text в поисковой системе в конкретную дату(date) Нужно посчитать:
- Количество уникальных постов, которые были просмотрены в конкретную дату за конкретным search_text
- Максимальное количество постов, просмотренное одним юзером в конкретную дату за конкретным 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 нету такой фичи.