172 похожих чатов

Подскажите плиз: Есть запрос с оконной функцией, которая получает значение из

выражения.
Мне нужно результат этой оконной функции добавить в еще одно выражение, в котором происходят вычисления со значениями из полей связанной таблицы: <window_result> - <parent_discount> + <parent_expansion>
И желательно бы еще обернуть все в ROUND() 😀

Можно ли такое провернуть в одном запросе?

Сам запрос: https://gist.github.com/Ingco/6789b763d4185cdf5c186d014d5dfd0a (получен из ОРМ 😅)

где:
- raw_final_sum алиас результата оконной функции
- "stock_purchaseorder"."discount" дисконт из связанной таблицы
- "stock_purchaseorder"."expansion" надбавка из связанной таблицы

5 ответов

41 просмотр

"Стандартный" ответ на подобные вопросы в SQL — nest it. ;)

Artem-Gubatenko Автор вопроса
Yaroslav Schekin
"Стандартный" ответ на подобные вопросы в SQL — ne...

как подзапрос, а его результат уже в выражение? SELECT ..., (SELECT SUM(...) OVER (...) FROM ...) - <discount> + <expansion> FROM ... примерно в этом направлении?

Artem Gubatenko
как подзапрос, а его результат уже в выражение? SE...

Я имел в виду вот это: 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 — совсем другой вопрос. ;)

Artem-Gubatenko Автор вопроса
Yaroslav Schekin
Я имел в виду вот это: SELECT ... FROM ( ...

спасибо, буду разбираться не сможем в ОРМ, перейдем на чистый, персонально для этого запроса :)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта