使用SQLite进行简单的数学计算 - Android

Tof*_*ira 1 java sql sqlite android

我是SQL的新手,我正在尝试使用Android应用程序中的简单数学进行查询.这就是我要做的 -

我有一个名为allfoods的表,名为'calories'和'size'的列.这是查询 -

int tempCalories = 100;
int maxCalories = 300;
Cursor dataFoods = myDataBase.rawQuery("SELECT id FROM allfoods WHERE size <> 0 AND (" + tempCalories + " + (calories * (size / 100)) < " + maxCalories +")" , null);
Run Code Online (Sandbox Code Playgroud)

那会有用吗?我自己测试它有些麻烦,因为返回的值太多了.

谢谢!

Lar*_*rsB 16

你好tofira,

是的,如果您将分母更改为100.0英寸,您的查询将起作用(size / 100.0).

但是,您的查询可能会返回0,如下所示:

100 + (calories * (size / 100.0)) < 300

当大小和/或卡路里的值超出范围时,将返回false.

证明

为了测试你的查询,我创建了一个包含数据的表和一个测试视图.

数据

为了测试一些东西,我创建了一个表,其中大小的值以1到1的步长为1,卡路里的步长为5,从5到5000,如下所示:

Id  |   size    |   calories
----------------------------
1   |   1       |   5
2   |   2       |   10
3   |   3       |   15
4   |   4       |   20
5   |   5       |   25
Run Code Online (Sandbox Code Playgroud)

测试

为了测试你的等式,我创建了一个视图来验证等式的每个步骤.

SQL

CREATE VIEW "test" AS 
    SELECT id, size AS 'S', calories AS 'C',
    size/100.0 AS 'S/100',
    calories * (size/100.0) AS 'C*(S/100)', 
    100 + (calories * (size/100.0)) AS '100+(C*(S/100))',
    CASE WHEN (300 > (100 + (calories * (size/100.0)))) 
        THEN 'true' ELSE 'false' END AS 'Eq'
    FROM allfoods;
Run Code Online (Sandbox Code Playgroud)

结果

Id  |  S   |  C    |  S/100  |  C*(S/100)  |  100+(C*(S/100))  |  Eq
---------------------------------------------------------------------------
62  |  62  |  310  |  0.62   |  192.2      |  292.2            |  true
63  |  63  |  315  |  0.63   |  198.45     |  298.45           |  true
64  |  64  |  320  |  0.64   |  204.8      |  304.8            |  false
65  |  65  |  325  |  0.65   |  211.25     |  311.25           |  false
66  |  66  |  330  |  0.66   |  217.8      |  317.8            |  false
Run Code Online (Sandbox Code Playgroud)

结论

对我的测试数据运行查询将返回第1行到第63行.

  • 如果我能为你付出努力,我会给两个赞成票;-)好的工作 (2认同)