funkcja AVG podaje tylko zaokrągloną średnią

Użytkowanie programu bazodanowego
gryszard
Posty: 2
Rejestracja: wt kwie 17, 2018 11:04 pm

funkcja AVG podaje tylko zaokrągloną średnią

Post autor: gryszard »

Dzień dobry wszystkim forumowiczom.

Mam na imię Rysiek i jestem początkującym maturalnym bazodanistą. Borykam się z ogromnym problemem, który eliminuje mnie z gry o punkty na maturze i nie mogę znaleźć odpowiedzi w internecie:

funckja obliczająca średnią AVG podaje mi tylko zaokrąglony do cyfry jedności wynik, nie jestem w stanie odczytać dokładnej liczby, a tym bardziej przybliżyć do dowolnej ilości miejsc po przecinku.

Czy ktoś miał podobny problem? Jak coś takiego rozwiązać?

Reinstalacja nie pomaga, system operacyjny też nie wpływa na problem, grzebałem też trochę w opcjach, ale nie widzę, poza tym nie chcę tracić dużo czasu... Pojawia się ten problem zarówno na Windowsie i na Linuksie. Microsoft Office nie sprawia tego problemu, ale nie o tym w sumie mowa.

Pozdrawiam wszystkich i czekam niecierpliwie na odpowiedź :)
Libre Office 5.4.5.1
Ubuntu 17.10
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: funkcja AVG podaje tylko zaokrągloną średnią

Post autor: Jan_J »

Szybki eksperyment porównawczy zachowania PostgreSQLa i HSQLDB1.8 wbudowanego w Base pokazał że
avg z wyrażeń całkowitoliczbowych w Postgresie jest typu numeric;
avg w hsql jest typu tego co uśredniane wyrażenie.

Tyle doraźny test. Wyczerpująca odpowiedź wymaga zajrzenia do dokumentacji standardów SQL oraz systemów: http://hsqldb.org/doc/1.8/guide, http://hsqldb.org/doc/2.0/guide.

HSQL:
The returned value type for COUNT is INTEGER, for MIN, MAX and AVG it is the same type as the column [...]
(http://hsqldb.org/doc/1.8/guide/ch09.html#N1251E)
Tak więc kolumna avg(pole typu integer) przekazuje daną typu integer, a avg z kolumny decimal(4,2) jest typu decimal(4,2). Jawna konwersja typu pomaga, np. avg(cast("a" as double)) daje wynik double.

Dla porównania, http://www.postgresql.org/docs, którego implementacja sql jest dość bliska standardu, mówi że
Function: avg(expression)
Argument type(s): smallint, int, bigint, real, double precision, numeric, or interval
Return type: numeric for any integer-type argument, double precision for a floating-point argument, otherwise the same as the argument data type
Description: the average (arithmetic mean) of all input values
(https://www.postgresql.org/docs/9.3/sta ... egate.html)

Btw., jak widać wyjaśnienie da się znaleźć w internecie co nie znaczy, że znajdziemy je poprzez wyszukiwarkę ...
poza tym nie chcę tracić dużo czasu
Co proszę? to znaczy kto powinien go stracić w Twoim imieniu?
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
gryszard
Posty: 2
Rejestracja: wt kwie 17, 2018 11:04 pm

Re: funkcja AVG podaje tylko zaokrągloną średnią

Post autor: gryszard »

Dziękuję za pomoc. Tu padło wiele celnych spostrzeżeń, które z pewnością przydadzą mi się w rozwiązywaniu podobnych niejasności w przyszłości.
Wyczerpująca odpowiedź wymaga zajrzenia do dokumentacji standardów SQL
Btw., jak widać wyjaśnienie da się znaleźć w internecie co nie znaczy, że znajdziemy je poprzez wyszukiwarkę ...
Istotnie, jawna konwersja typów pomogła, jest to strzał w dziesiątkę.
Co proszę? to znaczy kto powinien go stracić w Twoim imieniu?
Zabrzmiało to niemiło w moim imieniu, przepraszam za sprawienie kłopotu. Chodziło mi o to, że męczyłbym się poszukując magicznych ustawień w programie Libre Office lub bezskutecznie wpisując frazy "AVG nie działa" w wyszukiwarkę. Liczyłem na dłoń osoby bardziej doświadczonej, która potrafi lepiej podejść do problemu.

Jeszcze raz dziękuję. Trafna i merytoryczna odpowiedź, temat został wyjaśniony :)

Życzę miłego dnia!
Libre Office 5.4.5.1
Ubuntu 17.10
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: funkcja AVG podaje tylko zaokrągloną średnią

Post autor: Jan_J »

Kod: Zaznacz cały

kto powinien go stracić w Twoim imieniu?
chór zgryźliwych starców.

Jesteśmy tu, bo chcemy pomóc, jeśli potrafimy. Temat był dobrze postawiony, więc nie ma problemu. Tyko śmiesznie zabrzmiało.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ