Martinez31
21.01.2018, 23:49:18
Dobry wieczór.
Proszę o pomoc w poniższym zagadnieniu,
W bazie danych na której uczę się języka zapytań mam kolumnę pensja, typ danych w tej kolumnie to money. Próbuje wyciągnąć średnią z pensji za pomocą funkcji agregującej AVG, niestety pojawia się błąd.
Przykład zapytania:
Select AVG(pensja) as Średnie_wynagdodzenie
From pracownicy
Błąd:
BŁĄD: funkcja avg(money) nie istnieje
LINE 1: select AVG (pensja) as Średnia_wynagrodzeń
^
HINT: Brak funkcji pasującej do podanej nazwy i typów argumentów. Być może należy dodać jawne rzutowanie typów.
********** Błąd **********
BŁĄD: funkcja avg(money) nie istnieje
Stan SQL: 42883
Wskazówka: Brak funkcji pasującej do podanej nazwy i typów argumentów. Być może należy dodać jawne rzutowanie typów.
Znak: 8
Pozdrawiam.
mmmmmmm
22.01.2018, 08:38:22
"A money value can be cast to numeric without loss of precision. " -
https://www.postgresql.org/docs/9.5/static/...type-money.htmlSELECT AVG(pensja::numeric) AS srednie_wynagdodzenie FROM pracownicy
Martinez31
25.01.2018, 23:54:04
Witam,
Serdeczne dzięki za pomoc.
Kontynuując temat.... po zastosowaniu zapytania: " SELECT AVG(pensja::numeric) AS srednie_wynagdodzenie FROM pracownicy "
otrzymałem wynik:
Średnie_wynagrodzenie
numeric
2490.4761904761904762
Wynik jak najbardziej prawidłowy, ale chał bym otrzymaną liczbę zaokrąglić do 2 miejsc po przecinku a następnie przekonwertować ja z powrotem na typ danych money
Wiem że do zaokrąglenia używa się funkcji ROUND a do konwertowania liczb funkcji CAST lub CONVERT, niestety nie wychodzi.
PROŚBA O POMOC.
mmmmmmm
26.01.2018, 08:22:27
SELECT AVG(pensja::numeric)::money AS srednie_wynagdodzenie FROM pracownicy
Martinez31
26.01.2018, 19:49:27
Dzięki serdeczne za pomoc.
Jak w takim razie zaokrąglić do dwóch miejsc po przecinku następujący wynik zapytania:
Średnie_wynagrodzenie
numeric
2490.4761904761904762
Pierwotne zapytanie wygląda następująco: " SELECT AVG(pensja::numeric) "Średnie wynagdodzenie" FROM pracownicy "
mmmmmmm
27.01.2018, 11:37:56
Powyżej już napisałem. Castuj (za pomocą ::(typ) ) z powrotem na money
Martinez31
27.01.2018, 18:34:25
Nie chcę zmieniać typu danych na money, chce by został typ numeric zaokrąglony do np. dwóch miejsc po przecinku.
mmmmmmm
28.01.2018, 20:49:41
SELECT avg(pensja::numeric)::numeric(10,2), round(avg(pensja::numeric),2) FROM pracownicy
Martinez31
31.01.2018, 21:57:49
Wielkie dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.