MySQL数值相乘问题:phpMyAdmin中账单数据求和未乘数量列致结果异常
解决phpMyAdmin中可计费项求和错误的问题
你遇到的问题根源很清晰——计算收费/未收费总额时,没把单项金额乘以对应的BIL_Quantity数量字段,这就是为什么2018-03-07的未收费总额只得到105(正确值315应该是105×3,说明那一行的数量是3)。
下面是修正后的SQL查询,分两种场景供你选择:
基础版(仅统计___BillableDatas表数据)
SELECT BIL_Date AS `日期`, -- 计算已收费项的总金额:金额×数量后求和 SUM(CASE WHEN BIL_Status = 'charged' THEN BIL_Amount * BIL_Quantity ELSE 0 END) AS BIL_Sum_Charged, -- 计算未收费项的总金额:金额×数量后求和 SUM(CASE WHEN BIL_Status = 'notcharged' THEN BIL_Amount * BIL_Quantity ELSE 0 END) AS BIL_Sum_NotCharged FROM ___BillableDatas GROUP BY BIL_Date ORDER BY BIL_Date;
关联销售税版(如果需要结合___SalesTaxes计算含税金额)
假设两张表通过BIL_TaxID和ST_TaxID关联,税率字段为ST_TaxRate(百分比格式,比如10代表10%):
SELECT bd.BIL_Date AS `日期`, SUM(CASE WHEN bd.BIL_Status = 'charged' THEN bd.BIL_Amount * bd.BIL_Quantity * (1 + st.ST_TaxRate/100) ELSE 0 END) AS BIL_Sum_Charged, SUM(CASE WHEN bd.BIL_Status = 'notcharged' THEN bd.BIL_Amount * bd.BIL_Quantity * (1 + st.ST_TaxRate/100) ELSE 0 END) AS BIL_Sum_NotCharged FROM ___BillableDatas bd LEFT JOIN ___SalesTaxes st ON bd.BIL_TaxID = st.ST_TaxID GROUP BY bd.BIL_Date ORDER BY bd.BIL_Date;
关键说明
- 核心修改:在
SUM()函数中加入* BIL_Quantity,确保每条记录的金额先乘以数量再汇总 - 使用
CASE语句区分不同状态的记录,分别计算对应总额 GROUP BY BIL_Date保证结果按日期分组展示- 关联销售税时用
LEFT JOIN,避免因为没有匹配的税项导致数据丢失
执行这个查询后,2018-03-07的未收费总额应该就能得到正确的315了。
内容的提问来源于stack exchange,提问作者user4393948
相关产品推荐
相关产品推荐

