SQLite3中使用除法的计算字段

Mat*_*t A 3 sql sqlite

我有一个带有 2 个 INT 字段的 sqlite3 表。(通过和失败)

我想计算 % Passed 所以我使用以下 SQL

SELECT id,
       passed,
       failed,
       passed / (passed + failed )* 100 AS 'passedPC'
  FROM myData
Run Code Online (Sandbox Code Playgroud)

如果 Passed 是 23 并且 Failed 是 3 我得到 0 返回这是意外的。

为什么是这样?

jpw*_*jpw 5

这是因为你在做整数除法和23/26=0. 您需要强制它进行浮点除法。最简单的方法是将一个值与1.0这样的值相乘:

SELECT id, passed, failed, ((passed * 1.0) / (passed + failed )) * 100 AS 'passedPC' 
FROM myData
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用强制转换运算符将 aa 列强制为real数据类型:

SELECT id, passed, failed, cast(passed as real) / (passed + failed ) * 100 AS 'passedPC' 
FROM myData;
Run Code Online (Sandbox Code Playgroud)

显示差异的示例 SQL Fiddle