Возвращает только уникальные хэши, т.е. дубликатов не существует:
select *,
-- group sum of all files
sum(size) over ()
from
(
select *,
-- rows per hash
count(*) over (partition by hash) as cnt
from file
) as dt
where cnt = 1
Редактировать: Возвращает только одну строку на га sh:
select *,
-- group sum of all files
sum(size) over ()
from
(
select *,
-- unique number per hash
row_number(*) over (partition by hash order by hash) as rn
from file
) as dt
where rn = 1
Оба запроса являются стандартными SQL, но PostgreSQL также поддерживает собственный синтаксис:
select *,
-- group sum of all files
sum(size) over ()
from
(
select DISTINCT ON (hash) *
from file
order by hash
) as dt