выражения.
Мне нужно результат этой оконной функции добавить в еще одно выражение, в котором происходят вычисления со значениями из полей связанной таблицы: <window_result> - <parent_discount> + <parent_expansion>
И желательно бы еще обернуть все в ROUND() 😀
Можно ли такое провернуть в одном запросе?
Сам запрос: https://gist.github.com/Ingco/6789b763d4185cdf5c186d014d5dfd0a (получен из ОРМ 😅)
где:
- raw_final_sum алиас результата оконной функции
- "stock_purchaseorder"."discount" дисконт из связанной таблицы
- "stock_purchaseorder"."expansion" надбавка из связанной таблицы
"Стандартный" ответ на подобные вопросы в SQL — nest it. ;)
знать бы как это сделать)
как подзапрос, а его результат уже в выражение? SELECT ..., (SELECT SUM(...) OVER (...) FROM ...) - <discount> + <expansion> FROM ... примерно в этом направлении?
Я имел в виду вот это: SELECT ... FROM ( SELECT "stock_purchaseorderline"."purchase_order_id", "stock_purchaseorder"."discount", "stock_purchaseorder"."expansion", SUM(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") - ROUND(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") * "stock_purchaseorderline"."discount") / 100), 2)) + ROUND((((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") - ROUND(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") * "stock_purchaseorderline"."discount") / 100), 2)) * "stock_purchaseorderline"."expansion") / 100), 2))) OVER (PARTITION BY "stock_purchaseorderline"."purchase_order_id" ORDER BY "stock_purchaseorderline"."purchase_order_id") AS "raw_final_sum", COALESCE((SELECT SUM(U0."amount") AS "paid_amount" FROM "finance_transactionline" U0 WHERE (U0."content_type_id" = 37 AND U0."object_id" = ("stock_purchaseorderline"."purchase_order_id")) GROUP BY U0."content_type_id", U0."object_id" LIMIT 1), 0.00) AS "paid_sum", "stock_purchaseorder"."number" AS "number" FROM "stock_purchaseorderline" INNER JOIN "stock_purchaseorder" ON ("stock_purchaseorderline"."purchase_order_id" = "stock_purchaseorder"."id") WHERE "stock_purchaseorder"."supplier_id" = 13 GROUP BY "stock_purchaseorderline"."id", ROUND(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") * "stock_purchaseorderline"."discount") / 100), 2), ROUND((((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") - ROUND(((("stock_purchaseorderline"."cost_per_item" * "stock_purchaseorderline"."quantity") * "stock_purchaseorderline"."discount") / 100), 2)) * "stock_purchaseorderline"."expansion") / 100), 2), COALESCE((SELECT SUM(U0."amount") AS "paid_amount" FROM "finance_transactionline" U0 WHERE (U0."content_type_id" = 37 AND U0."object_id" = ("stock_purchaseorderline"."purchase_order_id")) GROUP BY U0."content_type_id", U0."object_id" LIMIT 1), 0.00), "stock_purchaseorder"."number", "stock_purchaseorder"."discount", "stock_purchaseorder"."expansion" ) AS nested_query ORDER BY nested_query."purchase_order_id" Как это сделать в используемом ORM — совсем другой вопрос. ;)
спасибо, буду разбираться не сможем в ОРМ, перейдем на чистый, персонально для этого запроса :)
Обсуждают сегодня