我有一个sqlite3表格,其中有两个INT字段。(Passed和Failed)
我想计算通过率,所以使用以下SQL语句
SELECT id,
passed,
failed,
passed / (passed + failed )* 100 AS 'passedPC'
FROM myData
如果Passed是23,而Failed是3,我得到了意外的0返回值。
为什么会这样?
这是因为你正在进行整数除法,23/26=0
。你需要强制使用浮点除法。最简单的方法是像这样将一个值乘以1.0
:
SELECT id, passed, failed, ((passed * 1.0) / (passed + failed )) * 100 AS 'passedPC'
FROM myData
或者您可以使用强制转换运算符将列强制转换为real
数据类型:
SELECT id, passed, failed, cast(passed as real) / (passed + failed ) * 100 AS 'passedPC'
FROM myData;
示例SQL Fiddle展示了它们之间的区别。
整数除法会截断结果。
你可以在除法之前进行乘法操作和/或将其转换为其他数据类型:
SELECT id, passed, failed,
100 * passed / (passed + failed ) AS 'passedPC'
FROM myData
SELECT id, passed, failed,
100.00 * passed / (passed + failed ) AS 'passedPC'
FROM myData