Страница 1 из 1

Ошибка MySQL чтоле ...

Добавлено: 2012-06-06 13:28:35
Alex Keda

Код: Выделить всё

mysql> SELECT * FROM `WorksCompliteAgregate` WHERE (`ContractID` = 10369 AND `Month` = 497);
+---------+------------+-------+-----------+---------+--------+---------+--------+
| ID      | ContractID | Month | ServiceID | Comment | Cost   | Discont | Amount |
+---------+------------+-------+-----------+---------+--------+---------+--------+
| 8843074 |      10369 |   497 |     10000 | ?20440  |   1.67 |    0.10 |    365 |
| 8843077 |      10369 |   497 |     20000 | ?20441  | 150.00 |    1.00 |      1 |
+---------+------------+-------+-----------+---------+--------+---------+--------+
2 rows in set (0.92 sec)

mysql> SELECT SUM(`Amount`*`Cost`*(1-`Discont`)*100)/100 as `Summ` FROM `WorksCompliteAgregate` WHERE (`ContractID` = 10369 AND `Month` = 497); 
+------------+
| Summ       |
+------------+
| 548.594985 |
+------------+
1 row in set (0.91 sec)

mysql> SELECT 365 * 1.67 * ( 1 - 0.10);
+--------------------------+
| 365 * 1.67 * ( 1 - 0.10) |
+--------------------------+
|                 548.5950 |
+--------------------------+
1 row in set (0.00 sec)

mysql> 
шо за ахтунг?
==
часть *100)/100 - это я добавил - когда понял что число явно не то выдаётся и попытался понять что не так

Re: Ошибка MySQL чтоле ...

Добавлено: 2012-06-06 13:33:01
GhOsT_MZ
А в чем косяк? Округляет до разных разрядов?

Re: Ошибка MySQL чтоле ...

Добавлено: 2012-06-06 13:45:18
GhOsT_MZ
Кстати, а зачем здесь функцию SUM использовать, она же аггрегационная по сути?

Re: Ошибка MySQL чтоле ...

Добавлено: 2012-06-06 13:48:46
Alex Keda

Код: Выделить всё

SUM(`Amount`*`Cost`*(1-`Discont`))
считает неправильно, вообще-то

Re: Ошибка MySQL чтоле ...

Добавлено: 2012-06-06 14:22:36
GhOsT_MZ
И правда...
А если без SUM попробовать, какие результаты для обоих строк вернет?

Re: Ошибка MySQL чтоле ...

Добавлено: 2012-06-06 14:30:32
Alex Keda
тоже неверные

Код: Выделить всё

mysql> SELECT `Amount`*`Cost`*(1-`Discont`) as `Summ` FROM `WorksCompliteAgregate` WHERE (`ContractID` = 10369 AND `Month` = 497);
+--------+
| Summ   |
+--------+
| 548.59 |
|   0.00 |
+--------+
2 rows in set (0.97 sec)

mysql> 

Re: Ошибка MySQL чтоле ...

Добавлено: 2012-06-10 20:35:21
FiL
ачто неправильно? Что округление проводится? A какая версия мускула?

Re: Ошибка MySQL чтоле ...

Добавлено: 2012-06-13 10:49:17
Gamerman
SUM(`Amount`*`Cost`*(1-`Discont`)*100)/100 и SUM(`Amount`*`Cost`*(1-`Discont`)*100/100) - часто будет разным за счет разного алгоритма округления.

Re: Ошибка MySQL чтоле ...

Добавлено: 2013-02-15 14:16:59
Alex Keda
однако, в расылке мусечной подсказали - поля у меня float, а для таких рассчётов они должны быть decimal