Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.007 c
3-72684
Паша_
2003-12-24 20:43
2004.01.23
Удалить удаленное...


3-72649
Dr.sam
2003-12-26 11:12
2004.01.23
Select из нескольких таблиц


3-72628
Zemal
2003-12-26 13:21
2004.01.23
Проблема с подбором DBGrid а под .


1-72732
Wolverin
2004-01-05 15:15
2004.01.23
Глюки TImage


14-72898
Cerber
2004-01-03 11:39
2004.01.23
Сотик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский