我的桌子看起来像这样:
error | num | date
-------+-------+------------
274 | 38431 | 2016-07-01
389 | 54811 | 2016-07-02
401 | 54465 | 2016-07-03
我想计算“错误”在哪个日期超过“数字”的1%。
目前,我正在尝试使用以下表达式执行此操作:
select date, error, num, (100 * (error / num)) as percentage
from DD
limit 3;
我得到的结果不正确:
date | error | num | percentage
------------+-------+-------+------------
2016-07-01 | 274 | 38431 | 0
2016-07-02 | 389 | 54811 | 0
2016-07-03 | 401 | 54465 | 0
如果我取出100 *,也会得到同样的错误结果。
使用以下解决方案,
select DD.*, (100.0 * error/num) as percentage from DD where (100.0 * error /num) > 1.0
我得到正确的第一行,但其余的不正确:
error | num | date | percentage
-------+-------+------------+----------------------
1265 | 54642 | 2016-07-17 | 2.3150689945463197
274 | 274 | 2016-07-01 | 100.0000000000000000
389 | 389 | 2016-07-02 | 100.0000000000000000
我检查了日期2016-07-01,它有274错误,但数字高得多。为什么它对第一行有效,但对其余行却无效?
答案 0 :(得分:4)
使用100.0
而不是100
来避免整数除法:
select dd.*, (100.0 * error / num) as percentage
from dd
where (100.0 * error / num) > 1.0;
答案 1 :(得分:1)
我认为您只需要带有算术运算的where
子句:
select dd.*
from dd
where error > num / 100;
如果需要百分比,请注意整数除法
(error * 100.0 / num)