Šta je novo?

postreSQL i ostatak pri deljenju - HITNO

MaliSpaja

Slavan
Učlanjen(a)
02.08.2004
Poruke
128
Poena
319
Pozdrav svima,
moram da preko selecta prikazem ostatak rezultat deljenja 2 kolone, sa sve ostatkom. Nikako mi ovo ne polazi sa rukom. Pokusao sam koriscenjem operatera /, kao i posle kombinovanjem sa %, MOD,...

Moj upit izgleda ovako:

select b_login, b_sex, b_member_begin_ts, b_rating_yes, b_rating_no, b_rating_yes / (b_rating_yes + b_rating_no) AS score from beauty where b_member_begin_ts > '2008-06-01' and b_member_begin_ts < '2008-07-01';

Dakle deo b_rating_yes / (b_rating_yes + b_rating_no) AS score mi daje 0 tamo gde bi trebalo da bude npr 0.643

Kada pokusam i najprostiji prikaz b_rating_yes / 2 , opet mi ne daje ostatak.


Google-ovao sam vec 1h ali nista.

hvala
 
Prvo da se osvrnem na funkciju ROUND.

SQL Server 2005 Programming je napisao(la):
Funkcija ROUND uzima broj naveden u izrazu i zaokružuje ga na navedenu dužinu.

ROUND(<izraz>,<dužina> [,<funkcija>])

Parameter dužina određuje preciznost do koje izraz treba zaokružiti. Opcioni parametar funkcija može se upotrebiti za definisanje da li broj treba zaokružiti ili iseći. Ako se vrednost funkcija izostavi ili je jednaka 0 (podrazumevano), vrednost u izrazu biće zaokružena. Ako se zada bilo koja vrednost različita od 0, vrenost u izrazu biće isečena.

Za PostgreSQL potraži sam:

http://www.postgresql.org/docs/8.1/static/index.html

Generalno, mislim da je to u pitanju jer ne znam kakva je tvoja struktura podataka u tabeli, ti deliš dve promenljive tipa INT i zbog toga ti se ostatak ne može prikazati.
Moraćeš malo da modifikuješ tvoj upit i koristiš, recimo, tip podatka DECIMAL. Funkciju ROUND onda upotrebi da definišeš veličinu ostatka.
 
Poslednja izmena:
Mogao bi da napišeš koji su tipovi tih kolona, kao i tu gde bi kažeš rezultat trebalo da bude 0.643, koje su konkretno vrednosti b_rating_yes i b_rating_no kolona.
Drugo, šta dobijaš kad te konkretne vrednosti ubaciš u upit bez FROM klauzule tj. samo

SELECT (b_rating_no, b_rating_yes / (b_rating_yes + b_rating_no)) + (b_rating_no, b_rating_yes % (b_rating_yes + b_rating_no))
gde su b_rating_no i b_rating_yes te konkretne vrednosti, pa će valjda biti malo jasnije.
 
Koliko sam ja razumeo tebi su b_rating_no i b_rating_yes celi brojevi (integer).

Zato ti i radi celobrojno deljenje tj npr 2 / 20 = 0, a 2 % 20 = 2.
Probaj da ih pretvoris u numeric (mrzi me sad da trazim kako) ili ako ti treba odredjen broj decimala, npr 3 onda mozes ovako

b_rating_yes * 1000 / (b_rating_yes + b_rating_no)

Tako ces da dobijes trocifren broj ;)

PS.
Operator % radi samo sa celim brojevima i rezultat je ceo broj.
 
da, kada mnozim za 1000 dobijem trocifreni broj..sad jos samo kad bih mogao da zarez pomerim za 3 mesta nalevo :D
I ovo ce mi odraditi posao, mada bi mnogo lepse bilo da dobijem prave velicine 0.xxxx

a to pretvaranje u numeric nikako da nadjem.
 
Poslednja izmena:
Evo moze ovako :)
Kod:
b_rating_yes::float8 / (b_rating_yes + b_rating_no)
 
Nazad
Vrh Dno