184 похожих чатов

Комрады, привет. Подскажите, пожалуйста, такой момент. Из бд нужно вытащить количество

уников всего для определенного события, максимальное количество уников за минуту и количество уников за последнюю минуту.
Как бы это все пооптимальнее сделать? У меня получился запрос:

SELECT event_id, uniques_count, uniques_max_count_in_minute, uniques_count_last_min
FROM
(
SELECT event_id, uniqCombined(remote_addr, http_user_agent) AS uniques_count FROM viewers_test WHERE event_id = '11' GROUP BY event_id
) ANY LEFT JOIN (
SELECT event_id, uniques_max_count_in_minute, uniques_count_last_min
FROM
(
SELECT event_id, uniqCombined(remote_addr, http_user_agent) AS uniques_max_count_in_minute FROM viewers_test WHERE event_id = '11' GROUP BY toStartOfMinute(time), event_id ORDER BY uniques_max_count_in_minute DESC LIMIT 1
) ANY LEFT JOIN
(
SELECT event_id, uniqCombined(remote_addr, http_user_agent) AS uniques_count_last_min FROM viewers_test WHERE event_id = '11' AND time = (now() - 60) GROUP BY event_id
) USING (event_id)
) USING (event_id)

Он отрабатывает примерно за то же время, за которое суммарно отрабатывает каждый селект из этого запроса по отдельности. Может быть можно было бы как-то переиспользовать результаты запроса или оптимизировать каким-то иным методом? Подскажите, в какую сторону можно глядеть?

1 ответов

8 просмотров

это можно в первом срзау посчитать uniqCombinedIf(remote_addr, http_user_agent, time = now() - 60) вам сортировать не надо, просто обернуть еще в один подзапрос select event_id, max(uniques_max_count_in_minute) from ( SELECT event_id, uniqCombined(remote_addr, http_user_agent) AS uniques_max_count_in_minute FROM viewers_test WHERE event_id = '11' GROUP BY toStartOfMinute(time), event_id )

Похожие вопросы

Обсуждают сегодня

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
77
А дин типизация это хорошо или плохо?
Alexey
12
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Карта сайта