我确定我这样做的顺序是错误的。我有以下计算:
(`p`.`price`*`op`.`quantity`) * ((`p`.`tax_state`+`p`.`tax_fed`)/100) + (`p`.`price`*`op`.`quantity`) * `op`.`discount` as totaldisc,
我将价格和数量乘以税除以100加上价格和数量,然后乘以小数折扣金额。当我使用计算器执行此操作时,我得到了正确的折扣,但使用SQL,我只需花几美元。
答案 0 :(得分:0)
我认为它的运算符优先级问题。试试这个:
(
(`p`.`price`*`op`.`quantity`) *
((`p`.`tax_state`+`p`.`tax_fed`)/100) +
(`p`.`price`*`op`.`quantity`)
) * `op`.`discount` as totaldisc,
摘自MySQL文档网站:
一起显示的运算符 一行具有相同的优先权。 INTERVAL BINARY,COLLATE!
- (一元减号),〜(一元位反转)^
*,/,DIV,%,MOD
- ,+<<,>> &安培; |
=(比较),< =>,> =,>,< =,<,<>,!=,IS,LIKE,REGEXP,IN BETWEEN,
情况,时间,然后,不是和&&,和XOR
||,或
=(赋值),:=
有关运算符优先级检查的更多信息:
http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html
答案 1 :(得分:0)
您是否给予总价((价格*数量)+((价格*数量)+税/ 100))或仅含税价格的折扣?
如果您提供价格*数量的折扣,那么它是好的,否则括号必须放在dicount
之前((p
。price
* op
。quantity
)*((p
。tax_state
+ p
。 tax_fed
)/ 100)+(p
。price
* op
。quantity
))* op
。discount
as totaldisc ,