У меня есть услуга подписки, которая предоставляет множество предметов.
Подписчики добавляют предметы к доставке, создавая строку в delivery_items
.
До недавнего времени подписчики могли добавлять только 1 из каждого элемента к доставке. Но теперь я добавил колонку количества к моей таблице delivery_items
.PostgreSQL сумма количества детских товаров
Предоставлено this schema, and an outdated query (на SQL Fiddle), как я могу выбрать общую сумму элемента, который мне понадобится для доставки каждого дня?
Это обеспечило таблицу дней, и пункты будут доставлены в тот же день, но не учитывает количество:
SELECT
d.date,
sum((di.item_id = 1)::int) as "Bread",
sum((di.item_id = 2)::int) as "Eggs",
sum((di.item_id = 3)::int) as "Coffee"
FROM deliveries d
JOIN users u ON u.id = d.user_id
JOIN delivery_items di ON di.delivery_id = d.id
GROUP BY d.date
ORDER BY d.date
В идеале, мой запрос будет агностиком к специфике предметов, как идентификатор/имя.
Благодаря
Изменить, чтобы добавить схему:
deliveries (TABLE)
id int4(10)
date timestamp(29)
user_id int4(10)
delivery_items (TABLE)
delivery_id int4(10)
item_id int4(10)
quantity int4(10)
items (TABLE)
id int4(10)
name varchar(10)
users (TABLE)
id int4(10)
name varchar(10)
что-то вроде 'sum (if (item_id = 1, item_quantity, 0)) ... '? суммируйте поле количества или 0, в зависимости от соответствия типа элемента. –
, или, возможно, использовать суб-выбор для агрегирования количества для каждого элемента до объединения. поэтому вместо соединения delivery_items di используйте 'join (выберите sum (item_Quanity), Delivery_ID, Item_ID из группы доставки_items по Delivery_Id, item_ID) DI' – xQbert