COUNT и GROUP BY с течением времени - PullRequest
1 голос
/ 29 июля 2011

У меня есть необходимость создавать отчеты о продажах по дням, неделям, месяцам и т. Д. В PostgreSQL.У меня есть следующие настройки таблиц:

tbl_products:
    id INT
    name VARCHAR

tbl_purchase_order:
    id INT
    order_timestamp TIMESTAMP

tbl_purchase_order_items:
    id INT
    product_id INT (FK to tbl_products.id)
    order_id (FK to tbl_purchase_order.id)

Мне нужно создать запрос SQL, который возвращает количество раз, когда данный продукт был приобретен в течение определенного периода времени.То есть мне нужно запросить, сколько раз данный идентификатор продукта появляется в позиции заказа на поставку в конкретном месяце, дне, году и т. Д. В предыдущем вопросе я узнал, как использовать date_trunc () для усечения моего столбца TIMESTAMP допериод времени, который меня беспокоит.Теперь я столкнулся с тем, как правильно выполнить COUNT и GROUP BY.

Я пробовал несколько запросов, используя различные комбинации COUNT (XXX) и GROUP BY XXX, но, кажется, никогда не придумывал, что я 'Я ожидаю.Может ли кто-нибудь дать мне руководство о том, как построить этот запрос?Я в большей степени Java-разработчик, так что я все еще хорошо разбираюсь в SQL-запросах.Спасибо за любую помощь, вы можете предоставить.

Ответы [ 2 ]

4 голосов
/ 29 июля 2011

Количество в год:

SELECT oi.product_id, 
       extract(year from po.order_timestamp) as order_year
       count(*)
FROM purchase_order_items oi
   JOIN purchase_order po ON po.id = oi.order_id
GROUP BY extract(year from po.order_timestamp)

Счетчик в месяц:

SELECT oi.product_id, 
       extract(month from po.order_timestamp) as order_month
       extract(year from po.order_timestamp) as order_year
       count(*)
FROM purchase_order_items oi
   JOIN purchase_order po ON po.id = oi.order_id
GROUP BY extract(year from po.order_timestamp), 
         extract(month from po.order_timestamp)
1 голос
/ 29 июля 2011

См. Функции даты и времени postgres http://www.postgresql.org/docs/8.1/static/functions-datetime.html

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

...