url_id,
countIf(type = 'opened') AS percent
FROM hits
,
(
SELECT
domain_id,
total_hits
FROM
(
SELECT
domain_id,
countIf(type = 'opened') AS total_hits,
uniq(url_id) AS urls
FROM hits
WHERE event_date = today()
GROUP BY domain_id
HAVING (urls > 1) AND (total_hits > 10000)
)
) AS hit_stat
WHERE (hits.domain_id = hit_stat.domain_id) AND (hits.event_date = today())
GROUP BY
hits.domain_id,
hits.url_id
HAVING percent >= 0.9
А почему в самом верхнем select недоступен hit_stat.total_hits ? Not found column =(((
EXPLAIN SYNTAX SELECT ... попробуйте посмотрите как запрос переписывается если конечно версия clickhouse позволяет
А зачем вам промежуточный селект?
я сначала выбираю тотал_хит для доменов с хитами >10k, и количеством страниц пер домен, в верхних селект дожен отобрать такие домены, 90% хитов приходится на 1 страницу, там не дописано having percent >= 0,9 а в усовияъ выборки я хотел поделить количество хитов на страниу на тотал хитов и получить сколько процентов хитов по этой странице
Ну вы во 2ом запросе селектите то, что уже получили во внутреннем. Я считаю, что можно его выкинуть, тогда запрос станет проще, для кх в том числе.
во внутреннем я группирую по domain_id, во внешнем по domain_id, url_id
Я про средний, между ними
так там всего 2 селекта...
А вы его просто добавляете или под агрегатом?
тут надо переписать через inner join и переименовать поля в подзапросе select bbbb,cccc from xxx join (select bbbb as ccc, .... from yyy) on bbbb=cccc
Я делал с иннер тоже самое. Чуть позже покажу как вышло окончательно
total_hits. попробуйте в ключ группировки его добавить в большом запросе.
Обсуждают сегодня