|
Тема
|
не ми излизат сметките
|
|
Автор | 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 е по стандарта и би трябвало да го има
Питай някой Майсикеладжия да ти каже подходяща функция
| |
|
|
|
|