Я пишу запрос, чтобы суммировать данные в базе данных Postgres:граф столбцов присоединяемой таблицы
SELECT products.id,
products.NAME,
product_types.type_name AS product_type,
delivery_types.delivery,
products.required_selections,
Count(s.id) AS selections_count,
Sum(CASE
WHEN ss.status = 'WARNING' THEN 1
ELSE 0
END) AS warning_count
FROM products
JOIN product_types
ON product_types.id = products.product_type_id
JOIN delivery_types
ON delivery_types.id = products.delivery_type_id
LEFT JOIN selections_products sp
ON products.id = sp.product_id
LEFT JOIN selections s
ON s.id = sp.selection_id
LEFT JOIN selection_statuses ss
ON ss.id = s.selection_status_id
LEFT JOIN listings l
ON (s.listing_id = l.id
AND l.local_date_time BETWEEN
To_timestamp('2014/12/01', 'YYYY/mm/DD'
) AND
To_timestamp('2014/12/30', 'YYYY/mm/DD'))
GROUP BY products.id,
product_types.type_name,
delivery_types.delivery
В основном мы имеем продукт с выбором, эти выборы имеют списки и списки имеют local_date
. Мне нужен список всех продуктов и количество списков, которые у них есть между двумя датами. Независимо от того, что я делаю, я получаю подсчет всех выборов (всего). Я чувствую, что я что-то пропускаю. Та же концепция относится к warning_count
. Кроме того, я не совсем понимаю, почему Postgres требует от меня добавить group by
.
Схема выглядит следующим образом (части вы заботитесь о любом случае):
products
name:string
, product_type:fk
, required_selections:integer
, deliver_type:fk
selections_products
product_id:fk
, selection_id:fk
selections
selection_status_id:fk
, listing_id:fk
selection_status
status:string
listing
local_date:datetime
Ваша версия Postgres? Откуда происходит 'f' в' count (f) '? Когда вы пишете «сколько списков», вы хотите дважды подсчитать списки, если два выбора одного и того же листинга содержат один и тот же продукт? –