我正在使用下面的查询将客户为给定公司ID进行的所有重复交易汇总在一起。客户信息存储在联系人表中,交易详细信息位于客户交易表中,表通过contact_id链接。我在WHERE子句中遇到了一些奇怪的行为。 t.amount列是DECIMAL(15,2)。
使用WHERE t.amount > 0.0
得出大约170,000的结果。但是,使用WHERE t.amount >= 0.0
会将结果增加到200,000。更奇怪的是,当我尝试WHERE t.amount = 0.0
时,查询返回0.0。来自其他公司的数据在>
和>=
之间显示相同的金额差异。
SELECT SUM(amount) AS amount
FROM (
SELECT *,
@counter := IF(@customer_id = b.contact_id, @counter + 1, 1) AS txn_number,
@customer_id := b.contact_id
FROM (
SELECT t.contact_id, SUM(t.amount) AS amount, t.transacted_at AS transacted_at
FROM customer_transactions t
INNER JOIN contact con ON con.contact_id = t.contact_id
WHERE con.company_id = #CompanyId
AND t.amount >= 0.0
AND t.is_paid = true
AND t.transacted_at IS NOT NULL
GROUP BY t.contact_id, DATE(t.transacted_at)
ORDER BY t.contact_id, t.transacted_at ASC
) AS b
) AS ct
WHERE ct.txn_number > 1
简而言之,仅使用>
会返回一个结果,使用>=
会返回更大的结果,即使它被设置为>= 0.0
是否有任何理由会发生这种情况?