#mysql #sql
#mysql #sql
Вопрос:
У меня есть таблица со столбцами user_id, time_stamp и activity, которые я использую для перекодирования действий пользователя для журнала аудита.
Как я могу ПОДСЧИТАТЬ количество уникальных идентификаторов пользователя, где time_stamp = 0, когда таких строк может быть несколько, отличающихся только текстом действия?
Ответ №1:
Похоже, вам нужно использовать:
SELECT COUNT(DISTINCT t.user_id)
FROM YOUR_TABLE t
WHERE t.time_stamp = 0
GROUP BY t.activity
Комментарии:
1. @Mawg:
GROUP BY
Предоставляет контекст для агрегатной функции (COUNT
в этом примере), в противном случае подсчет производился бы для всех записей в таблице.2. Я не думаю, что это действительно работает. Группировка по действиям означает, что для каждого уникального действия вы получаете количество разных пользователей. Удалите группу, и это сработает.
3. @jmoreno: Цитирую OP «ПОДСЧИТАЙТЕ количество уникальных идентификаторов пользователя, где time_stamp = 0, когда таких строк может быть несколько, отличающихся только текстом действия». Это означает группировку по столбцу activity.
4. Я читаю «когда может быть несколько таких строк» как проблему, которую он не знает, как преодолеть, поэтому мой комментарий. OTOH, он принял ваш ответ, так что, возможно, я неправильно понимаю…
Ответ №2:
select count(*)
FROM (select t.user_id, count(*) actions
FROM table t
where t.time_stamp = 0
group by t.user_id) u
Должен сделать это за вас (не самый простой способ, но он показывает, как сделать пару разных вещей).