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

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2012-06-06 13:28:35

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

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 - это я добавил - когда понял что число явно не то выдаётся и попытался понять что не так
Убей их всех! Бог потом рассортирует...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

GhOsT_MZ
лейтенант
Сообщения: 662
Зарегистрирован: 2011-04-25 11:40:35
Контактная информация:

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

Непрочитанное сообщение GhOsT_MZ » 2012-06-06 13:33:01

А в чем косяк? Округляет до разных разрядов?

GhOsT_MZ
лейтенант
Сообщения: 662
Зарегистрирован: 2011-04-25 11:40:35
Контактная информация:

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

Непрочитанное сообщение GhOsT_MZ » 2012-06-06 13:45:18

Кстати, а зачем здесь функцию SUM использовать, она же аггрегационная по сути?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2012-06-06 13:48:46

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

SUM(`Amount`*`Cost`*(1-`Discont`))
считает неправильно, вообще-то
Убей их всех! Бог потом рассортирует...

GhOsT_MZ
лейтенант
Сообщения: 662
Зарегистрирован: 2011-04-25 11:40:35
Контактная информация:

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

Непрочитанное сообщение GhOsT_MZ » 2012-06-06 14:22:36

И правда...
А если без SUM попробовать, какие результаты для обоих строк вернет?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2012-06-06 14:30:32

тоже неверные

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

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> 
Убей их всех! Бог потом рассортирует...

FiL
ст. лейтенант
Сообщения: 1375
Зарегистрирован: 2010-02-05 0:21:40

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

Непрочитанное сообщение FiL » 2012-06-10 20:35:21

ачто неправильно? Что округление проводится? A какая версия мускула?

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

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

Непрочитанное сообщение Gamerman » 2012-06-13 10:49:17

SUM(`Amount`*`Cost`*(1-`Discont`)*100)/100 и SUM(`Amount`*`Cost`*(1-`Discont`)*100/100) - часто будет разным за счет разного алгоритма округления.
Глюк глюком вышибают!

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2013-02-15 14:16:59

однако, в расылке мусечной подсказали - поля у меня float, а для таких рассчётов они должны быть decimal
Убей их всех! Бог потом рассортирует...