SQL百分比SUM不同于100

时间:2013-11-05 22:06:35

标签: mysql sql percentage

我正在使用此查询来获取贴纸(pdo)的使用百分比:

SELECT
id_sticker,
CAST((COUNT(*) / :stickers_count * 100) AS UNSIGNED) as percentage
FROM user_sticker AS sticker_total
WHERE id_user_to = :id_user
GROUP BY id_sticker
ORDER BY percentage DESC

这是最终结果:

{
    "data": [
        {
            "id_sticker": 2,
            "percentage": 28.5714285714
        },
        {
            "id_sticker": 1,
            "percentage": 14.2857142857
        },
        {
            "id_sticker": 3,
            "percentage": 14.2857142857
        },
        {
            "id_sticker": 5,
            "percentage": 14.2857142857
        },
        {
            "id_sticker": 6,
            "percentage": 14.2857142857
        },
        {
            "id_sticker": 7,
            "percentage": 14.2857142857
        }
    ]
}

百分比的总和是99.9999999999 ...它应该是100(即我正在使用的饼图组件触发错误)。有任何想法吗?谢谢!

我在抓取数据后结束了这个php修复:

        $dif = 100;
        foreach($result as $item) {
            $dif = $dif - $item['percentage'];
        }
        if($dif > 0) {
            $result[0]['percentage'] += $dif;
        } elseif($dif < 0) {
            $result[count($result)-1]['percentage'] += $dif;
        }

2 个答案:

答案 0 :(得分:3)

这只是一个舍入错误。如果你需要它最多加100,只需将值舍入到1或2个小数位(对于饼图应该足够)并重新计算最后一个为100 - sum(1..(n-1))(顺便说一下,这是伪代码)。

答案 1 :(得分:1)

你不能认真地期待使用浮动算术的完美precision,对吗?