Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 01:17 09.07.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Тема не ми излизат сметките  
Авторk (Нерегистриран)
Публикувано04.06.03 12:15



При изчисленията не получавам "правилните стойности". Имате ли идейка защо става това нещо и как да се справя с проблема.
Ето едно примерче:
(полетата, вкл. в изчисленията (MDWorkDays,WDays) са от тип tinyint(2))
Тая sum функция при групиране дава 4 ст. вповече.

mysql> SELECT 110/T_MonthDays.MDWorkDays*SUM(T_Work.WDays) AS A3 FROM T_Work,T_Employed_Ch,T_Employed,T_MonthDays WHERE T_Work.CRid=T_Employed.CRid AND T_Employed_Ch.URid=T_Employed.URid AND T_Employed_Ch.UURid=T_Work.UURid AND T_MonthDays.MDMonth=T_Work.WMonth AND T_Work.CRid=2 AND T_Work.WMonth='2003-04-01' AND T_Work.WPayMonth<='2003-05-01' AND T_Employed.URid=2 GROUP BY T_Employed.URid;
+--------+
| A3 |
+--------+
| 110.04 |
+--------+
1 row in set (0.00 sec)

mysql> SELECT 110/T_MonthDays.MDWorkDays*T_Work.WDays AS A3 FROM T_Work,T_Employed_Ch,T_Employed,T_MonthDays WHERE T_Work.CRid=T_Employed.CRid AND T_Employed_Ch.URid=T_Employed.URid AND T_Employed_Ch.UURid=T_Work.UURid AND T_MonthDays.MDMonth=T_Work.WMonth AND T_Work.CRid=2 AND T_Work.WMonth='2003-04-01' AND T_Work.WPayMonth<='2003-05-01' AND T_Employed.URid=2;
+--------+
| A3 |
+--------+
| 110.00 |
+--------+
1 row in set (0.00 sec)

mysql> select T_MonthDays.MDWorkDays from T_MonthDays where MDMonth='2003-04-01';
+------------+
| MDWorkDays |
+------------+
| 21 |
+------------+
1 row in set (0.00 sec)

mysql> SELECT SUM(T_Work.WDays) FROM T_Work,T_Employed_Ch,T_Employed WHERE T_Work.CRid=T_Employed.CRid AND T_Employed_Ch.URid=T_Employed.URid AND T_Employed_Ch.UURid=T_Work.UURid AND T_Work.CRid=2 AND T_Work.WMonth='2003-04-01' AND T_Work.WPayMonth<='2003-05-01' AND T_Employed.URid=2 GROUP BY T_Employed.URid; +-------------------+
| SUM(T_Work.WDays) |
+-------------------+
| 21 |
+-------------------+
1 row in set (0.00 sec)

mysql> select 110/21*21;
+-----------+
| 110/21*21 |
+-----------+
| 110.00 |
+-----------+
1 row in set (0.00 sec)

mysql> show variables like 'version';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| version | 3.23.41 |
+---------------+---------+
1 row in set (0.00 sec)



Тема Обикновено Sum cast-ва до Floatнови [re: k]  
Автор NDeu (член)
Публикувано04.06.03 12:59



Вж.





Тема Re: Обикновено Sum cast-ва до Floatнови [re: NDeu]  
Авторk (Нерегистриран)
Публикувано04.06.03 13:28



в моя случай става дума ЗА ЦЕЛИ ЧИСЛА от тип tinyint(2),
така че не би трябвало да се получава този ефект



Тема Нищо, че става дума ЗА ЦЕЛИ ЧИСЛАнови [re: k]  
Автор NDeu (член)
Публикувано04.06.03 14:39



вземи пробвай :

SELECT 110*cast(SUM(T_Work.WDays) as integer)/T_MonthDays.MDWorkDays AS A3 FROM T_Work,T_Employed_Ch,T_Employed,T_MonthDays WHERE T_Work.CRid=T_Employed.CRid AND T_Employed_Ch.URid=T_Employed.URid AND T_Employed_Ch.UURid=T_Work.UURid AND T_MonthDays.MDMonth=T_Work.WMonth AND T_Work.CRid=2 AND T_Work.WMonth='2003-04-01' AND T_Work.WPayMonth<='2003-05-01' AND T_Employed.URid=2 GROUP BY T_Employed.URid;



Тема Re: Нищо, че става дума ЗА ЦЕЛИ ЧИСЛАнови [re: NDeu]  
Авторk (Нерегистриран)
Публикувано04.06.03 16:26



Благодаря мнооогооооо

Моята версия на MySQL не поддържа cast и convert, обаче пробвах да разменя операндите в израза, както в твоето примерче и бачка!

mysql> SELECT 110*sum(T_Work.WDays)/T_MonthDays.MDWorkDays AS A3 FROM .......
+--------+
| A3 |
+--------+
| 110.00 |
+--------+
1 row in set (0.00 sec)


благодаря още веднъж.



Тема Re: Нищо, че става дума ЗА ЦЕЛИ ЧИСЛАнови [re: k]  
Автор NDeu (член)
Публикувано04.06.03 17:51



Без преобразуване не е чисто решение. Все някога ще ти гръмне


Аз с MySQL не съм работил, но знам, че е богат на готови функции и не ми се вярва да няма нещо подходящо за закръгляване на float до integer. Пък и cast е по стандарта и би трябвало да го има

Питай някой Майсикеладжия да ти каже подходяща функция




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.