Czuję, że brakuje mi czegoś oczywistego. Próbuję przetestować dystrybucję random()
. Oto tabela:Podział liczb całkowitych zwraca 0
create table test (
id int,
random_float float,
random_int int
);
tutaj jest to, co chcę zrobić:
truncate table test;
insert into test (id)
values (generate_series(1,1000));
update test
set
random_float = random() * 10 + 1;
update test
set
random_int = trunc(random_float);
select
random_int,
count(random_int) as Count,
cast(count(random_int)/max(id) as float) as Percent
from test
group by random_int
order by random_int;
Jednakże, "procent" kolumna zwraca zero dla każdego rekordu. Próbowałem rzucić go jako float, jako dziesiętne, próbowałem zmienić kolumnę random_int
na dziesiętne zamiast liczby całkowitej, zawsze taki sam wynik.
Każdy wgląd, co robię źle?
Przesyłaj do 'numeric' (lub' float', chociaż wolę ten pierwszy) * przed * podzielisz. – vyegorov
Możesz odtworzyć to w jednym wierszu: 'wybierz 1/2'. Zwraca 0. – usr
@Phrancis, powinieneś rzucić * przed * dzielisz: 'wybierz 1/2, 1.0/2, 1.0 * 1/2, 1 :: numeryczne/2, rzucaj (1 jako zmiennopozycyjne)/2;' – vyegorov