Postgres, порядок по СУММЕ столбцов в дочерней таблице

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть следующие (упрощенные) таблицы

продукты — id name

заказ_продуктов — quantity , product_id

Я хотел бы упорядочить строки из products таблицы на основе суммы quantity столбцов order_products для каждого продукта

Если order_products есть эти строки

 quantity - product_id 2 - 555 2 - 555 6 - 666 3 - 777  

Я хочу, чтобы результаты были упорядочены таким образом: 666, 555, 777

666 имеет количество 6, 555-4, а 777-3

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

 select p.*, coalesce(sum(op.quantity), 0) quantity_sold from products p left outer join order_products as op on op.product_id = p.id group by p.id order by quantity_sold desc  

Ответ №1:

Просто используйте ORDER BY и агрегируйте функцию

 select p.product_id, p.name, sum(quantity) quantity_sold from order_products op join products p on op.product_id = p.product_id group by p.product_id, p.name order by sum(quantity) desc  

Комментарии:

1. Я хочу выбрать строки из products таблицы, order_products но мне не ясно, как я должен это написать, чтобы у каждого продукта был quantity_sold столбец, который является суммой quantity для каждой строки для этого продукта

2. @DiyanSlavov обновлено

3. Ладно, я понял, что было не так с моим первоначальным запросом. Мое требование состоит в том , что products оно должно быть включено, даже если в нем нет отношений order_products , поэтому LEFT OUTER необходимо использовать join. Это, однако, приводит к появлению NULL в quantity_sold столбце, поэтому его необходимо объединить с COALESCE, и в итоге он работал так, как я хотел