Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 ХОчется странного: агрегатную функцию РАНД(ОМ)  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17715
А встречал ли кто нибудь где-нибудь СКЛ фунцию, которая
возврашает случайную запись в группе. типа вывести
случайного ребенка для каждого родителя

select parent_id, group_rand(*)
from child
group by parent_id

А так занудство получается : в каждой групе надо делать
.... order by rand() limit 1 ........







------------------------------------------
БИТЬ СТРУЕЙ Привилегия !
3 май 09, 23:28    [7140404]     Ответить | Цитировать Сообщить модератору
 Re: ХОчется странного: агрегатную функцию РАНД(ОМ)  [new]
ЯЕХХ
Guest
PostgreSQL 8.3
create type t_arand_num_state as (i int, r numeric);

create function arand_num_next (t_arand_num_state, numeric)
returns t_arand_num_state language sql as $$
select (
  $1.i+1,
  case when 1.0/$1.i > random() then $2 else $1.r end
)::t_arand_num_state
$$;

create function arand_num_final (t_arand_num_state)
returns numeric language sql as $$
select $1.r
$$;

create aggregate arand (numeric) (
  stype     = t_arand_num_state,
  sfunc     = arand_num_next,
  finalfunc = arand_num_final,
  initcond  = '(1,)'
);


--test
select g, arand(n)
from (values(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(2,10),(2,11),(2,12)) s(g,n)
group by g
4 май 09, 05:14    [7140681]     Ответить | Цитировать Сообщить модератору
 Re: ХОчется странного: агрегатную функцию РАНД(ОМ)  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17715
ЯЕХХ,

класс :-) надеюсь когда-нибудь ето встроят в
стандартный СКЛ-4 или СКЛ-5 :-)
4 май 09, 06:21    [7140689]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить