임의의 크기의 대표 데이터 샘플을 리턴하는 조회를 작성하려고합니다. n th 행을 선택하면됩니다. 여기서 n은 전체 결과 집합이 가능한 한 근접한 임의의 크기가되도록합니다.행을 균등하게 건너 뛴 고정 된 행 수를 선택하십시오.
결과 집합이 일반적으로 임의의 크기보다 작은 경우이 기능을 사용하고 싶습니다. 이 경우 전체 결과 집합이 반환되어야합니다.
나는 행을 선택하는 방법을 보여주는 this question을 찾았습니다.
이 다음과 같은 오류가 발생SELECT * FROM (
SELECT *, ((row_number() OVER (ORDER BY "time"))
% ceil(count(*)::FLOAT/500::FLOAT)::BIGINT) AS rn
FROM data_raw) sa
WHERE sa.rn=0;
:
ERROR: column "data_raw.serial" must appear in the GROUP BY clause or be used in an aggregate function Position: 23
이 같은 n
에 대한 계산을 제거 작동 : 여기
SELECT * FROM (
SELECT *, (row_number() OVER (ORDER BY "time"))
% 50 AS rn FROM data_raw) sa
LIMIT 500;
나는 또한 WHERE 절에 계산을 이동하려고 :
SELECT * FROM (
SELECT *, (row_number() OVER (ORDER BY "time")) AS rn
FROM data_raw) sa
WHERE (sa.rn % ceil(count(*)::FLOAT/500::FLOAT)::BIGINT)=0;
그 오류가 너무 결과 :
ERROR: aggregate functions are not allowed in WHERE Position: 108
사람 중 하나 어떻게 내 쿼리를 해결하는에 어떤 아이디어가 있습니까 또는 이렇게하는 더 좋은 방법?
나는 또한 임의의 숫자와 확률을 사용하여 행을 선택하는 것에 대해 생각해 봤지만, 나는 응집의 가능성이없는 결정 론적으로 뭔가를하고 싶습니다.
BTW, pg 9.4? 베타 - 릴리스를 사용하고 있습니까? –
예, 9.4를 사용하고 있습니다. – Ian