PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgresql:Làm cách nào để chọn các mục nhập n phần trăm (%) hàng đầu từ mỗi nhóm / danh mục

Để truy xuất các hàng dựa trên tỷ lệ phần trăm số hàng trong mỗi nhóm, bạn có thể sử dụng hai hàm cửa sổ:một để đếm các hàng và một để cung cấp cho chúng một số duy nhất.

select gp,
       val
from (
  select gp, 
         val,
         count(*) over (partition by gp) as cnt,
         row_number() over (partition by gp order by val desc) as rn
  from temp
) t
where rn / cnt <= 0.75;

Ví dụ về SQLFiddle:http://sqlfiddle.com/#!15/94fdd/1

Btw:sử dụng char hầu như luôn luôn là một ý tưởng tồi vì nó là kiểu dữ liệu có độ dài cố định được đệm vào độ dài xác định. Tôi hy vọng bạn chỉ làm điều đó để thiết lập ví dụ và không sử dụng nó trong bảng thực của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển nhiều giá trị trong một tham số duy nhất

  2. Truy vấn với LEFT JOIN không trả về các hàng có số lượng là 0

  3. Các chuỗi không bị ảnh hưởng bởi các giao dịch?

  4. Hàm PostgreSQL cho ID được chèn lần cuối

  5. PostgreSQL:KHÔNG VÀO so với EXCEPT sự khác biệt về hiệu suất (đã chỉnh sửa # 2)