Ответ 1
Да, вы можете использовать group by
:
select time, activities, count(*) from table group by time, activities;
В принципе, у меня есть таблица, подобная этой:
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
Несколько примечаний:
Запрос должен возвращаться:
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. поэтому я могу построить распределение для каждого уникального времени.
Да, вы можете использовать group by
:
select time, activities, count(*) from table group by time, activities;
select time, coalesce(count(case when activities = 3 then 1 end), 0) as count
from MyTable
group by time
Вывод:
| 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, даже если для этого сегмента времени нет активности этого типа.
Конечно, это не будет возвращать строки для сегментов времени без каких-либо действий любого типа. Если вам это нужно, вам нужно будет использовать левое соединение с таблицей, в которой перечислены все возможные временные сегменты.
Если я понимаю ваш вопрос, будет ли это работать? (вам нужно будет заменить свои фактические имена столбцов и таблиц)
SELECT time_col, COUNT(time_col) As Count
FROM time_table
GROUP BY time_col
WHERE activity_col = 3
Вы должны изменить запрос как:
SELECT time_col, COUNT (time_col) Как считать FROM time_table WHERE activity_col = 3 GROUP BY time_col
Это vl работает правильно...