2013-03-21 2 views
2

Я использую PostgreSQL и имею таблицу, как это: Смотрите SQL скрипки здесь: http://sqlfiddle.com/#!1/253b4/1Как агрегировать данные в SQL внутри вложенных групп

CREATE TABLE usage_sample 
(
    id serial primary key, 
    category text NOT NULL, 
    name text NOT NULL, 
    sample_time timestamp with time zone NOT NULL 
); 

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

cat1, act1, minute1, count 
cat1, act1, minute2, count 
cat1, act2, minute1, count 
cat1, act2, minute3, count 
cat2, act1, minute2, count 
... 

Я знаю, как получить количество за каждую минуту, используя группу, и как получить счетчик для каждого комбо категории и действия, но я не могу понять, как чтобы объединить их, чтобы я мог вложить группировки и подсчеты.

В скрипте sql http://sqlfiddle.com/#!1/253b4/1 показан пример набора данных и запросов, с которых я пытался начать. Может ли кто-нибудь дать мне совет о том, как получить результат, который мне нужен?

ответ

4

Это то, что вы хотите?

select category, name, date_trunc('minute', sample_time) as minute, count(*) 
from usage_sample 
group by category, name, date_trunc('minute', sample_time) 
order by category, name, minute 
+0

Это работает. Не совсем уверен, почему я этого раньше не видел. Благодарю. У меня есть обновленная скрипка здесь: http://sqlfiddle.com/#!1/785a0/2 – Allen

Смежные вопросы