![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка округления. [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]
Теперь тебя посадят...:)