Подтвердить что ты не робот

Подсчитать количество вхождений для каждого уникального значения

В принципе, у меня есть таблица, подобная этой:

time.....activities.....length  
13:00........3.............1  
13:15........2.............2  
13:00........3.............2  
13:30........1.............1  
13:45........2.............3  
13:15........5.............1  
13:45........1.............3  
13:15........3.............1  
13:45........3.............2  
13:45........1.............1  
13:15........3.............3  

Несколько примечаний:

  • Действия могут быть между 1 и 5
  • Длина может быть от 1 до 3

Запрос должен возвращаться:

time........count  
13:00.........2  
13:15.........2  
13:30.........0  
13:45.........1  

В принципе для каждого уникального времени я хочу подсчитать количество строк, где значение активности равно 3.

Итак, я могу сказать:

At 13:00 there were X amount of activity 3s.
At 13:45 there were Y amount of activity 3s.

Затем мне нужен счет для активности 1s, 2s, 4s и 5s. поэтому я могу построить распределение для каждого уникального времени.

4b9b3361

Ответ 1

Да, вы можете использовать group by:

select time, activities, count(*) from table group by time, activities;

Ответ 2

select time, coalesce(count(case when activities = 3 then 1 end), 0) as count
from MyTable
group by time

Пример SQL Fiddle

Вывод:

|  TIME | COUNT |
-----------------
| 13:00 |     2 |
| 13:15 |     2 |
| 13:30 |     0 |
| 13:45 |     1 |

Если вы хотите подсчитать все действия в одном запросе, вы можете сделать:

select time, 
    coalesce(count(case when activities = 1 then 1 end), 0) as count1,
    coalesce(count(case when activities = 2 then 1 end), 0) as count2,
    coalesce(count(case when activities = 3 then 1 end), 0) as count3,
    coalesce(count(case when activities = 4 then 1 end), 0) as count4,
    coalesce(count(case when activities = 5 then 1 end), 0) as count5
from MyTable
group by time

Преимущество этой группировки по видам деятельности состоит в том, что она вернет счет 0, даже если для этого сегмента времени нет активности этого типа.

Конечно, это не будет возвращать строки для сегментов времени без каких-либо действий любого типа. Если вам это нужно, вам нужно будет использовать левое соединение с таблицей, в которой перечислены все возможные временные сегменты.

Ответ 3

Если я понимаю ваш вопрос, будет ли это работать? (вам нужно будет заменить свои фактические имена столбцов и таблиц)

SELECT time_col, COUNT(time_col) As Count
FROM time_table
GROUP BY time_col
WHERE activity_col = 3

Ответ 4

Вы должны изменить запрос как:

SELECT time_col, COUNT (time_col) Как считать FROM time_table WHERE activity_col = 3 GROUP BY time_col

Это vl работает правильно...