파일 목록이있는 테이블이 있습니다.서브 폴더에있는 누적 파일 수
이create table sample_data (
id_folder bigint ,
id_parrent_folder bigint,
size bigint
);
내가 알고 싶습니다
, 많은 파일이 각 폴더 (현재 폴더 포함)의 모든 하위 폴더에 얼마나 (wigh 주어진 폴더를 시작) : id_folder, id_parrent_folder, 크기 (파일 크기)이 있습니다. 데이터
id_folder files
100623 35
100624 14
샘플 : 나는 PostgreSQL을 (postgresql docs)에서 예제를 사용하려고했습니다
insert into sample_data values (100623,58091,60928);
insert into sample_data values (100623,58091,59904);
insert into sample_data values (100623,58091,54784);
insert into sample_data values (100623,58091,65024);
insert into sample_data values (100623,58091,25600);
insert into sample_data values (100623,58091,31744);
insert into sample_data values (100623,58091,27648);
insert into sample_data values (100623,58091,39424);
insert into sample_data values (100623,58091,30720);
insert into sample_data values (100623,58091,71168);
insert into sample_data values (100623,58091,68608);
insert into sample_data values (100623,58091,34304);
insert into sample_data values (100623,58091,46592);
insert into sample_data values (100623,58091,35328);
insert into sample_data values (100623,58091,29184);
insert into sample_data values (100623,58091,38912);
insert into sample_data values (100623,58091,38400);
insert into sample_data values (100623,58091,49152);
insert into sample_data values (100623,58091,14444);
insert into sample_data values (100623,58091,33792);
insert into sample_data values (100623,58091,14789);
insert into sample_data values (100624,100623,16873);
insert into sample_data values (100624,100623,32768);
insert into sample_data values (100624,100623,104920);
insert into sample_data values (100624,100623,105648);
insert into sample_data values (100624,100623,31744);
insert into sample_data values (100624,100623,16431);
insert into sample_data values (100624,100623,46592);
insert into sample_data values (100624,100623,28160);
insert into sample_data values (100624,100623,58650);
insert into sample_data values (100624,100623,162);
insert into sample_data values (100624,100623,162);
insert into sample_data values (100624,100623,162);
insert into sample_data values (100624,100623,162);
insert into sample_data values (100624,100623,162);
있지만 (명백하게)는 할 수없는 나는 다음과 같은 출력을 기대할 아래 samle 데이터를 게시 감안할 때 이런 식으로 일하십시오. 어떤 도움을 주셔서 감사합니다.
- 편집 나는 다음과 같은 쿼리를 시도했습니다
:
WITH RECURSIVE included_files(id_folder, parrent_folder, dist_last_change) AS (
SELECT
id_folder,
id_parrent_folder,
size
FROM
sample_data p
WHERE
id_folder = 100623
UNION ALL
SELECT
p.id_folder,
p.id_parrent_folder,
p.size
FROM
included_files if,
sample_data p
WHERE
p.id_parrent_folder = if.id_folder
)
select * from included_files
이 작동하지 않습니다를, 모든 자녀에 대한 부모 및 하위 폴더에서 결과 행 등이 많이 있기 때문에 곱해진다.
비록 가장 빠른 해결책은 아니지만 커서를 사용해 보셨습니까? – AssaultingCuccos
+1 테스트 데이터를 제공하고 테이블 문을 생성합니다. –
@FlorisPrijt 솔직히 말하지만, 이것이 내 문제를 해결하는 데 어떻게 도움이되는지 이해하지 못합니다. –