2015-10-12 3 views
1

В Postgres таблицы с именем «Сделки», я пытаюсь подсчитать количество сделок J-типа для каждого месяца. Следующим является мой запрос.Postgresql Помощь Count Функция

select to_char("Date", 'Mon/YYYY') as "Date", 
sum(case when l_part LIKE 'J%' then count end) as "IDs" 
    from (
     select left("Type",4)as l_part, count(*),"Date" from 
     "Transactions" group by "Date",l_part 
     ) p group by "Date" 

    order by min("Date"); 

Однако с моим запросом возникает несколько проблем.

1) Число подсчитывали накоплением, так что отсчет каждого месяца также добавляет в общем количестве во всех месяцах, которые пришли раньше. Тем не менее, я просто пытаюсь считать каждый месяц индивидуально.

2) С помощью этого запроса, мой выход повторяет несколько месяцев (то есть, май 2015 Мой есть 3 строки, 2 строки являются пустыми, и 1 строка имеет фактическое количество)

Любые идеи будут оценены.

ответ

1

Я не думаю, что вам нужно подзапрос вообще. Попробуйте следующее:

SELECT 
    to_char("Date", 'Mon/YYYY') AS d, 
    count(*) AS "IDs" 
FROM "Transactions" 
WHERE "Type" LIKE 'J%' 
GROUP BY d 
+0

Я начал комментировать, но я понял, что мне нужно предоставить больше контекста в исходном посте, поэтому я буду переписывать по-другому. Спасибо. – Piechartking

1

Я думаю, что это проще сделать это без подзапроса:

SELECT date_trunc('month', "Date"), count(*) 
FROM "Transactions" 
WHERE "Type" LIKE 'J%' 
GROUP BY date_trunc('month', "Date"); 

Отредактировано:

date_trunc('month', ...) функция обрезает даты первого дня месяца отл. оба '2015-May-26' и '2015-May-09' будет '2015-May-01' и т. д. Я использовал эту функцию вместо to_char, потому что это моя привычка, так как группировка text может быть медленнее, чем группировка date. Конечно, это зависит от размера стола "Transactions".

+0

даты не хватает. OP группируется по месяцам/году – AlVaz

+0

Хорошо, но я думаю, что это не так важно, так как мой ответ также «подсчитывает количество транзакций J-типа за каждый месяц», а «date_trunc» более естественен для меня в таком случае. –

+0

Проблема в том, что она не сохраняет в группу OP путем логики, так что если ваш код был использован он будет выводить что-то совершенно отличное от цели – AlVaz