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)
为了测试你的等式,我创建了一个视图来验证等式的每个步骤.
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行.