2013-08-06 31 views
6

Tôi đang truy vấn bảng thanh toán tài khoản có danh sách tài liệu ap trong đó mỗi trường có (trong số các trường khác) những thứ tôi quan tâm để chạy truy vấn tổng hợp qua:Sử dụng chức năng xếp hạng postgres để giới hạn đến n kết quả hàng đầu

vendor_id, số tiền và ngày.

Tôi muốn xây dựng truy vấn trên bảng này đến nơi tôi sẽ nhận được, được nhóm theo năm, 10 nhà cung cấp hàng đầu được sắp xếp theo tổng số tiền (tổng số tiền).

Ai đó có thể cho tôi biết cách sử dụng chức năng xếp hạng cho việc này không.

+2

Xem [Tổng hợp và đặt hàng cùng một lúc] (http://stackoverflow.com/questions/15536667/) –

Trả lời

7
select * 
from (
    select the_year, vendor_id, amount, 
     row_number() over(
      partition by the_year 
      order by amount desc 
     ) as rn 
    from (
     select 
      date_trunc('year', the_date) as the_year, 
      vendor_id, 
      sum(amount) as amount 
     from ap 
     group by 1, 2 
    ) s 
) s 
where rn <= 10 
order by the_year, amount desc 
+0

Tuyệt vời! Tôi đã thực hiện một chỉnh sửa nhỏ vì có một tình trạng hôn mê sau khi một phân vùng bằng cách nhưng nếu không tip tuyệt vời. Chạy nhanh và chính xác. – Edmon