2010-06-18 3 views
4

표준 SQL 집계 함수 max()은 그룹에서 가장 높은 값을 반환합니다. min()은 가장 낮은 값을 반환합니다.그룹에 임의의 값을 반환하는 Oracle 집계 함수?

그룹에서 임의 값을 반환하는 Oracle에 집계 함수가 있습니까? 또는 이것을 달성하는 몇 가지 기술?

예, 테이블 foo 제공 :

group_id value 
1  1 
1  5 
1  9 
2  2 
2  4 
2  8 

는 SQL 쿼리

select group_id, max(value), min(value), some_aggregate_random_func(value) 
from foo 
group by group_id; 

생산할 수 있습니다 분명히으로

group_id max(value), min(value), some_aggregate_random_func(value) 
1  9   1   1 
2  8   2   4 

, 마지막 열을 어떤 임의의 값 인 그 그룹의.

+1

게리, 나는 중앙값이 아니라 [최소, 최대] 사이에 돔 무작위 값을 원하기 때문에. – tpdi

답변

10

당신은 아이디어가 무작위로 그룹 내에서 값을 분류하고, 첫째가 다른 방법하지만 아무도 그렇게 효율적으로 생각할 수있는 선택하는 것입니다 다음

select deptno,max(sal),min(sal),max(rand_sal) 
from(
select deptno,sal,first_value(sal) 
    over(partition by deptno order by dbms_random.value) rand_sal 
from emp) 
group by deptno 
/

처럼 뭔가를 시도 할 수 있습니다.

+0

와우, "order by dbms_random.value"가 열 번호로 해석 될 것이라고 생각했을 것입니다. 그러나 테스트 결과이 작품을 보여줍니다. 감사. – tpdi

0

임의의 요소를 추출 할 열에 임의의 문자열을 추가 한 다음 열의 min() 요소를 선택하고 앞에 붙인 문자열을 꺼낼 수 있습니다. 당신이 집계 함수를 사용하여 쿼리가 매우 복잡/또는 당신은 단지 데이터를 탐색하고 수동으로 쿼리를 입력하는 시나리오에 유용 할 수있는하여 두 그룹을 지정하지 마십시오 모시 이런 식으로

select group_id, max(value), min(value), substr(min(random_value),11) 
from (select dbms_random.string('A', 10)||value random_value,foo.* from foo) 

길고 변화하는 그룹 별 목록이 있습니다.

관련 문제