Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка округления. [D7, IB6.x]


dimm22 ©   (2003-12-26 11:15:00) 

Сделал представление из таблицы, интересующее меня поле (цена) double precision в таблице. В представлении делал групирование по артиклу и выводил среднее значение цены avg(price). И накопил ошибку на 100 000 тысяч рублей. Объясните в чём дело, неужели avg так "здорово" усредняет?


Sandman25   (2003-12-26 11:52:00) [1]

[16] dimm22 (26.12.03 11:46)

А, понял. Сравнивается AVG(Price)*Sum(Amount) и SUM(price*amount)?
Но ведь AVG(Price)=Sum(Price)/Count(*), а не Sum(Price*Amount)/Sum(Amount).

Иначе говоря, если у нас в таблице 2 записи:
Amount = 1 Price = 2
Amount = 10 Price = 4
То:
Sum(Amount)=11
AVG(Price)=3
Sum(Amount*Price)=42
11*3=33 <> 42, и это правильно!


dimm22   (2003-12-26 11:52:00) [2]


> sum(kol_tek*(cast(price*100 as int)/100))

Результат изменился, но в худшую сторону. Разница в 140 000.


Vick   (2003-12-26 11:52:00) [3]

а sum(kol_tek) чему равно??? :))))


dimm22   (2003-12-26 11:46:00) [4]

Запросы такие:
1)
CREATE VIEW myView(
CENA_F,
KOL_TEK,
NNUM)
select
avg(price),sum(kol_tek,nnum from table where data_p>="01.01.2000"
group by nnum;

Потом сделал select sum(kol_tek*price) from myView;

2)select
sum(cena_f*kol_tek) from table where data_p>="01.01.2000";

Результат различается.


Sandman25   (2003-12-26 11:45:00) [5]

Что-то я не понимаю...
Как можно сравнивать sum(kol_tek*price) и sum(kol_tek) и жаловаться, что они различаются??? Естественно, они различаются.


Johnmen   (2003-12-26 11:42:00) [6]

>dimm22

Видимо, очень большие количества. Причем неравновесные для различных видов продукции...
Попробуй так
sum(kol_tek*(cast(price*100 as int)/100))


dimm22   (2003-12-26 11:41:00) [7]


> Я не вижу sum(kol_tek*price) в запросе...

Это потом я посмотрел, но было уже поздно.
Скорее, скорее милиция уже дверь ломает.......8-)


Sandman25   (2003-12-26 11:41:00) [8]

Приведите 2 запроса, результаты которых Вы сравниваете и которые различаются на 100000.


dimm22   (2003-12-26 11:40:00) [9]

Справочник партий это таблица с товаром, который пришёл, но группирования по артикулу там ещё нет. Приходные цены соответственно разные, вот среднюю и надо посчитать.


Sandman25   (2003-12-26 11:39:00) [10]

Я не вижу sum(kol_tek*price) в запросе...


dimm22   (2003-12-26 11:37:00) [11]

Ошибка в 100 000 это по сумме, те sum(kol_tek*price) меньше на 100 000, чем сумма по таблице справочника партий.


Sandman25   (2003-12-26 11:36:00) [12]

Какие данные в таблице? Null разрешены?
Как проверяли, что не сходится на 100000?


dimm22   (2003-12-26 11:35:00) [13]

CREATE VIEW myview(
price,
KOL_TEK,
NNUM)
AS
select
avg(price),sum(kol_tek),nnum from table where data_p>="01.01.2000"
group by nnum;


Sandman25   (2003-12-26 11:33:00) [14]

Интересно, какие у них там цены, если ошибка на 100000 рублей... То есть должна была быть средняя цена 500 рублей за кг, а выдало 100500? :)
Может, не нужно умножать на количество?
AVG(price) вместо AVG(price*amount).


Sandman25   (2003-12-26 11:29:00) [15]

Напиши нам сюда свой select... пока на свободе...

[1] Johnmen © (26.12.03 11:19)

:)


___Nikolay   (2003-12-26 11:25:00) [16]

2 Johnmen
.....лол........... :))))))))))))))))))))


Johnmen   (2003-12-26 11:24:00) [17]

А вообще-то, такого быть не должно.


dimm22   (2003-12-26 11:23:00) [18]

Ну помогите же, пока я ещё на свободе.


Johnmen   (2003-12-26 11:19:00) [19]

Теперь тебя посадят...:)


Наверх

Титульная страница Поиск, карта сайта Написать письмо