Форум: "Базы";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
ВнизОшибка округления. Найти похожие ветки
← →
dimm22 (2003-12-26 11:15) [0]Сделал представление из таблицы, интересующее меня поле (цена) double precision в таблице. В представлении делал групирование по артиклу и выводил среднее значение цены avg(price). И накопил ошибку на 100 000 тысяч рублей. Объясните в чём дело, неужели avg так "здорово" усредняет?
← →
Johnmen (2003-12-26 11:19) [1]Теперь тебя посадят...:)
← →
dimm22 (2003-12-26 11:23) [2]Ну помогите же, пока я ещё на свободе.
← →
Johnmen (2003-12-26 11:24) [3]А вообще-то, такого быть не должно.
← →
___Nikolay (2003-12-26 11:25) [4]2 Johnmen
.....лол........... :))))))))))))))))))))
← →
Sandman25 (2003-12-26 11:29) [5]Напиши нам сюда свой select... пока на свободе...
[1] Johnmen © (26.12.03 11:19)
:)
← →
Sandman25 (2003-12-26 11:33) [6]Интересно, какие у них там цены, если ошибка на 100000 рублей... То есть должна была быть средняя цена 500 рублей за кг, а выдало 100500? :)
Может, не нужно умножать на количество?
AVG(price) вместо AVG(price*amount).
← →
dimm22 (2003-12-26 11:35) [7]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:36) [8]Какие данные в таблице? Null разрешены?
Как проверяли, что не сходится на 100000?
← →
dimm22 (2003-12-26 11:37) [9]Ошибка в 100 000 это по сумме, те sum(kol_tek*price) меньше на 100 000, чем сумма по таблице справочника партий.
← →
Sandman25 (2003-12-26 11:39) [10]Я не вижу sum(kol_tek*price) в запросе...
← →
dimm22 (2003-12-26 11:40) [11]Справочник партий это таблица с товаром, который пришёл, но группирования по артикулу там ещё нет. Приходные цены соответственно разные, вот среднюю и надо посчитать.
← →
Sandman25 (2003-12-26 11:41) [12]Приведите 2 запроса, результаты которых Вы сравниваете и которые различаются на 100000.
← →
dimm22 (2003-12-26 11:41) [13]
> Я не вижу sum(kol_tek*price) в запросе...
Это потом я посмотрел, но было уже поздно.
Скорее, скорее милиция уже дверь ломает.......8-)
← →
Johnmen (2003-12-26 11:42) [14]>dimm22
Видимо, очень большие количества. Причем неравновесные для различных видов продукции...
Попробуй так
sum(kol_tek*(cast(price*100 as int)/100))
← →
Sandman25 (2003-12-26 11:45) [15]Что-то я не понимаю...
Как можно сравнивать sum(kol_tek*price) и sum(kol_tek) и жаловаться, что они различаются??? Естественно, они различаются.
← →
dimm22 (2003-12-26 11:46) [16]Запросы такие:
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";
Результат различается.
← →
Vick (2003-12-26 11:52) [17]а sum(kol_tek) чему равно??? :))))
← →
dimm22 (2003-12-26 11:52) [18]
> sum(kol_tek*(cast(price*100 as int)/100))
Результат изменился, но в худшую сторону. Разница в 140 000.
← →
Sandman25 (2003-12-26 11:52) [19][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, и это правильно!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c