【问题标题】:Getting incorrect value from SQL Math Operation?从 SQL 数学运算中获取不正确的值?
【发布时间】:2014-11-13 17:36:34
【问题描述】:

我正在执行一项操作以根据 2 个值计算百分比。

我有一个表格可以跟踪月份和年份的总体价值。

表名称 - donation_tracker

我正在比较当前和上一年的所有月份,然后执行如下计算:

当前值(月 - 2014 年 1 月,CityID- 1)/先前值(月 - 2013 年 1 月,CityID- 1)= 分区值 * 100 = 新百分比值。

有些数学运算看起来是正确的,但有些是不正确的,例如下图显示的是 140,而应该是 130。

我查询的值如下:

列donation_amount设置为

类型 = 十进制

长度 = 10,2。

总和应该是 130...

SQL 代码-

SELECT city_markers.City_ID, city_markers.City_Name, city_markers.City_Lng, city_markers.City_Lat, SUM( d2.Donation_Amount ) , d1.Month, d1.Year, round( (
D2.Donation_amount / D1.Donation_amount
) *100, 2 )
FROM `city_markers`
INNER JOIN donation_tracker d1 ON city_markers.City_ID = d1.City_ID
INNER JOIN donation_tracker D2 ON d1.month = D2.month
AND d1.month = 'January'
AND d2.month = 'January'
AND d2.year = '2014'
AND D1.year = D2.year -1
AND D1.Location_ID = D2.Location_ID
GROUP BY city_markers.City_ID

谢谢。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您没有在这里总结金额:

    round( (D2.Donation_amount / D1.Donation_amount) *100, 2 )
    

    所以结果是根据第一行的值计算出来的:

    round( (70 / 50) *100, 2 ) ==> 140
    

    使用 sum() 得到预期的结果:

    round( (sum(D2.Donation_amount) / sum(D1.Donation_amount)) *100, 2 )
    

    【讨论】:

    • 谢谢你真的帮了我。
    猜你喜欢
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多