Повторное использование вычислений в запросе SQL - PullRequest
0 голосов
/ 24 марта 2020

Можно ли упростить этот sql запрос? Многие вычисления используются повторно, и было бы неплохо назвать каждое выражение и использовать имя вместо полного выражения.

SELECT SUM(T2.price * T1.amount) As price,
 (SUM(T2.price * T1.amount) - (SUM(T2.price * T1.amount) * (T3.discount / 100))) As base_price, 
 ((SUM(T2.price * T1.amount) - (SUM(T2.price * T1.amount) * (T3.discount / 100))) * (T3.vat / 100)) As vat_amount,
 (((SUM(T2.price * T1.amount) - (SUM(T2.price * T1.amount) * (T3.discount / 100))) * (T3.vat / 100)) + (SUM(T2.price * T1.amount) - (SUM(T2.price * T1.amount) * (T3.discount / 100)))) As total_price

Я ищу решение, подобное этому:

 SELECT SUM(T2.price * T1.amount) As price,
 (price - (price * (T3.discount / 100))) As base_price, 
 (base_price) * (T3.vat / 100)) As vat_amount,
 (vat_amount) + (base_price) As total_price

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Я попытался сделать это с CTE и подзапросами, как было предложено, но в итоге это выглядело довольно сложным и нечитаемым, поэтому я решил просто выполнить вычисления за пределами sql (php в данном случае)

0 голосов
/ 24 марта 2020

Может быть что-то в этом роде:

select 
(A.price - (A.price * B.p_discount)) As base_price, 
((A.price - (A.price * B.p_discount)) * B.p_vat) As vat_amount,
(((A.price - (A.price * B.p_discount)) * B.p_vat) + (A.price - (A.price * B.p_discount))) As total_price
from 
    ( select SUM(T2.price * T1.amount) As price, ...
    from T1 join T2 on ....
    ) A
join 
    (select (T3.discount / 100) as p_discount , (T3.vat / 100) as p_vat ,* 
    from T3
    ) B on ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...