在SQLite3中使用除法计算字段

4

我有一个sqlite3表格,其中有两个INT字段。(Passed和Failed)

我想计算通过率,所以使用以下SQL语句

SELECT id,
       passed,
       failed,
       passed / (passed + failed )* 100 AS 'passedPC'
  FROM myData

如果Passed是23,而Failed是3,我得到了意外的0返回值。
为什么会这样?
2个回答

9

这是因为你正在进行整数除法,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展示了它们之间的区别。


1

整数除法会截断结果。

你可以在除法之前进行乘法操作和/或将其转换为其他数据类型:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接