Суммарные значения SQLite

Когда я пытаюсь агрегировать цену, возвращаемое значение усекается и отсекает важные значения. Например, когда я использую sum() или total() для агрегирования цены, вместо 12 000,00 возвращается 12.

Я использовал как sum(), так и total(), а также пытался преобразовать число в число с плавающей запятой. Столбец имеет тип REAL.

select "Extended Price" 
from ReqData 
where "PR ID" = 11111111 
group by "PR ID";

Это возвращает 12 000,00

select sum("Extended Price") 
from ReqData 
where "PR ID" = 11111111 
group by "PR ID";

Это возвращает 12.

Вывод DBeaver


person Kyril Panfilov    schedule 05.07.2019    source источник
comment
Я не могу воспроизвести вашу проблему. В браузере БД для SQLite оба запроса возвращают 12000.0   -  person forpas    schedule 05.07.2019
comment
Добавлен снэпшот.   -  person Kyril Panfilov    schedule 05.07.2019
comment
У вас в таблице только 1 строка с PR ID = 11111111?   -  person forpas    schedule 05.07.2019
comment
Да, 1 ряд с расширенной ценой 12 000,00   -  person Kyril Panfilov    schedule 05.07.2019
comment
Смотрите мой ответ...   -  person forpas    schedule 05.07.2019


Ответы (1)


Проблема в том, что вы вставили значение столбца, например:

12,000.00

SQLite распознает его как TEXT, поскольку содержит запятую.
Измените значение на:

12000

or

12000.00

Когда значение TEXT используется для выполнения арифметических операций, таких как сложение, вычитание или даже сравнение, SQLite пытается преобразовать его в числовое, начиная с начальных символов, и если это вообще невозможно, он возвращает 0.
Таким образом, '12a' будет преобразуется в 12, 'abc' будет преобразовано в 0, поэтому в вашем случае '12,000.00' преобразуется в 12.

person forpas    schedule 05.07.2019
comment
Ах, это имеет смысл, у меня было ощущение, что это проблема с типом данных, но я не был уверен, как SQLite обрабатывает типы. Спасибо! - person Kyril Panfilov; 05.07.2019