这是一个系统的数据库的一部分,我开发:MySQL工作台错误
我需要创建一个返回的SQL语句客户名称以及该客户的所有销售总额。换句话说,客户在销售中花费的金额。
让我们创建一个例子:
Table client:
cliId = 1, cliName = "client1";
Table product:
proId = 1, proName = "prod1", proBaseValue = 3;
proId = 2, proName = "prod2", proBaseValue = 2.5;
proId = 3, proName = "prod3", proBaseValue = 1;
Table sale:
salId = 1, salAddition = 0, salDiscount = 1, sal_cliId = 1;
salId = 2, salAddition = 2, salDiscount = 0, sal_cliId = 1;
salId = 3, salAddition = 0, salDiscount = 2, sal_cliId = 1;
Table saleitems (Weak Entity from the relationship between sale and product):
sli_salId = 1, sli_proId = 2, sliRealValue = 2.5, sliQuantity = 1;
sli_salId = 2, sli_proId = 2, sliRealValue = 2.5, sliQuantity = 2;
sli_salId = 2, sli_proId = 3, sliRealValue = 1, sliQuantity = 1;
sli_salId = 3, sli_proId = 1, sliRealValue = 3, sliQuantity = 1;
sli_salId = 3, sli_proId = 2, sliRealValue = 2.5, sliQuantity = 1;
sli_salId = 3, sli_proId = 3, sliRealValue = 1, sliQuantity = 2;
在1日的情况下,无视 “salAddition” 和 “salDiscount”,我想出了下面的SQL语句:
select cliName, (sum(sliRealValue * sliQuantity))
from exampledb.client join exampledb.sale join exampledb.saleitems
where cliId = sal_cliId and
salId = sli_salId
group by cliId;
它完美地工作。但问题是,当我尝试将“salAddition”和“salDiscount”包含到数学。从理论上讲,这个SQL语句应该是:
select cliName, (sum(sliRealValue * sliQuantity) + sum(salAddition) - sum(salDiscount))
from exampledb.client join exampledb.sale join exampledb.saleitems
where cliId = sal_cliId and
salId = sli_salId
group by cliId;
请注意,我需要总结所有的添加,并从所有销售的所有折扣优惠,以使其发挥作用。这并不简单......
根据上面给出的例子,忽略附加值和折扣,预期的总价值将是16美元,并且包括这些属性,总价值应该是15美元,但结果I发现是13美元。 经过几个小时测试的代码和价值组合,我注意到,在第一次销售,增加和折扣价值乘以乘以1,在第二次销售,相同的价值乘以2,在第三次销售,价值乘以3等等...(并且不,它与Id值无关)。
我试图用...+ sum(salAddition - salDiscount)...
取代...+ sum(salAddition) - sum(salDiscount)...
但是我找到了相同的值(和问题)。
请问谁能告诉我这个BUG是怎么回事,如果可能的话,告诉我一种解决这个问题的方法?我在MySQL Workbench中发现了一个错误吗?
在此先感谢。
sql语句由mysql执行,而不是mysql workbench,所以这不能成为工作台中的bug – Shadow