@Leatington

Подсчёт запусков программы или как посчитать, учитывая GROUP BY?

Есть таблица с клиентами (clients) и таблица с запусками программы (runs), в таблице runs столбец client связан с AUTO_INCREMENT в таблице clients (id).
Первая запись клиента в таблице runs - это первый запуск им программы или просто говоря регистрация в системе, в таблице runs также указывается дата.
Нужно тремя (или одним) запросом посчитать количество новых пользователей (уникальных запусков) за сегодня (именно сегодня, а не за последние 24 часа), количество уникальных запусков (всех пользователей сразу) за сегодня и просто общее количество запусков за сегодня.

Столбец `date` сохраняет дату в формате UNIX, пример - 1676460404.
Вот так я получаю общее количество запусков за сегодня:
SELECT count(*) from `runs` where `date` > unix_timestamp(curdate())

Мне пришла идея воспользоваться GROUP BY, однако я забыл, что count считает для каждой группы отдельно и этот вариант не работает
Для подсчёта новых пользователей:
SELECT count(*) from `runs` group by `client` having min(date) > unix_timestamp(curdate())

Для подсчёта уникальных запусков:
SELECT count(*) from `runs` group by `client`
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
общее количество запусков за сегодня:
SELECT count(*) from `runs` where `date` >= unix_timestamp(curdate());


подсчёт уникальных запусков:
SELECT count(distinct client) from `runs` where `date` >= unix_timestamp(curdate());


подсчёт новых пользователей:
SELECT COUNT(*) FROM (
    SELECT 
        `client`, MIN(`date`) `first_run`
    FROM `runs` 
    GROUP BY `client` 
    HAVING `first_run` >= unix_timestamp(curdate())
) `todays_first_runs`;


https://sqlize.online/sql/mysql80/5f26564f43abe78c...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы