sqlite3中的一个奇怪的计算错误

时间:2013-01-05 23:25:54

标签: sql sqlite

我需要从2个表中计算一些数据。当我进行手动或(计算器)计算时,我得到的输出与查询时的输出不同。任何人都可以指出错误是什么?

当我进行手工计算时,我得到'10'作为总卡,但是当我运行此查询时,我得到'41'。这是否与与tbltrans.card列没有任何关系的索引有关。

这是代码:

select
    ifnull((tbltrans2.qty*tbltrans2.price*(tbltrans.Discountper/100)),0) Total,
    ifnull(sum(tbltrans.card),0) totalcard
from tbltrans2,tbltrans
where tbltrans2.transid = tbltrans.transid 
    and tbltrans.saledate='06/01/2013'

这是我的tbltrans: enter image description here 和tbltrans2: enter image description here

1 个答案:

答案 0 :(得分:1)

每个交易都有多个项目,因此card字段将针对每个项目记录显示一次,因此每次交易将对其进行多次求和。

您的查询还有另一个问题:您正在使用sum列的聚合函数(card),但没有其他值的聚合。 然后发生的是SQLite为card值计算一个总和,从而得到一个结果记录。 要计算此结果记录的Total值,SQLite不知道要使用哪个tbltrans / tbltrans2记录,因此它只使用一个随机从这些表中记录下来。

要计算正确的totalcard值,您不得在同一查询中加入tbltrans2表:

SELECT ifnull(sum(tbltrans.card), 0) AS totalcard
FROM tbltrans
WHERE tbltrans.saledate = '06/01/2013'

可以使用子查询计算Total值,但这取决于其含义应该是什么。 (每笔交易的总折扣?该日期所有交易的总折扣?)