Проблема с подсчетом

#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
  

Должен сделать это за вас (не самый простой способ, но он показывает, как сделать пару разных вещей).