#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, и в итоге он работал так, как я хотел