Простой математический расчет с SQLite - Android - PullRequest
1 голос
/ 23 октября 2011

Я довольно новичок в SQL, и я пытаюсь сделать запрос с простой математикой в ​​приложении для Android.Вот что я пытаюсь сделать -

У меня есть таблица с именем allfoods, со столбцами с именем «калории» и «размер».Вот запрос -

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

Будет ли это работать?У меня возникли проблемы с его тестированием, поскольку возвращаемые значения слишком разные.

Спасибо!

1 Ответ

16 голосов
/ 24 октября 2011

Привет тофира ,

Да , ваш запрос будет работать, если вы измените знаменатель на 100.0 в (size / 100.0).

Однако ваш запрос может вернуть 0, как ваше уравнение:

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

вернет false, когда значения для размера и / или калорий выходят за пределы допустимого диапазона.

Доказательство

Для проверки вашего запроса я создал таблицу с данными и представлением тестов.

Данные

Чтобы можно было что-то проверить, я создал таблицу, в которой значения размера варьировались с шагом 1 от 1 до 1000, а калории с шагом 5 от 5 до 5000, например:

Id  |   size    |   calories
----------------------------
1   |   1       |   5
2   |   2       |   10
3   |   3       |   15
4   |   4       |   20
5   |   5       |   25

Test

Чтобы проверить ваше уравнение, я создал представление для проверки каждого шага вашего уравнения.

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;

Результат

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

Заключение

Выполнение вашего запроса по моим тестовым данным вернет строку с 1 по 63.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...