Получение неверного ответа на формулу при добавлении столбца в таблицу в SQL - PullRequest
0 голосов
/ 23 декабря 2018

Моя таблица выглядит следующим образом:

     error |  num  |    date    
    -------+-------+------------
       274 | 38431 | 2016-07-01
       389 | 54811 | 2016-07-02
       401 | 54465 | 2016-07-03

Я хочу рассчитать, в какие даты «ошибка» составляла более 1% от «num».

В настоящее время я пытаюсь сделать это с этим выражением:

select date, error, num, (100 * (error / num)) as percentage 
from DD 
limit 3;

Результат, который я получаю, неверен:

        date    | error |  num  | percentage 
    ------------+-------+-------+------------
     2016-07-01 |   274 | 38431 |          0
     2016-07-02 |   389 | 54811 |          0
     2016-07-03 |   401 | 54465 |          0

Я получаю то же самое невернорезультат, если я вычитаю 100 *.

С решением ниже,

    select DD.*, (100.0 * error/num) as percentage from DD where (100.0 * error /num) > 1.0 

Я получаю правильный верхний ряд, но остальные неверные:

     error |  num  |    date    |      percentage      
    -------+-------+------------+----------------------
    1265 | 54642 | 2016-07-17 |   2.3150689945463197
     274 |   274 | 2016-07-01 | 100.0000000000000000
     389 |   389 | 2016-07-02 | 100.0000000000000000

Iпроверил дату 2016-07-01, и она имеет ошибку 274, но число намного выше.Почему это работает для верхнего ряда, но не для остальных?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Используйте 100.0 вместо 100, чтобы избежать целочисленного деления:

select dd.*, (100.0 * error / num) as percentage
from dd
where (100.0 * error / num) > 1.0;
0 голосов
/ 23 декабря 2018

Я думаю, что вам просто нужно предложение where с арифметикой:

select dd.*
from dd
where error > num / 100;

Если вы хотите указать процент, будьте осторожны с целочисленным делением:

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