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

Làm cách nào để chọn 5 PERCENT HÀNG ĐẦU từ mỗi nhóm?

Bạn có thể sử dụng CTE (Biểu thức bảng chung) được ghép nối với NTILE chức năng cửa sổ - điều này sẽ chia nhỏ dữ liệu của bạn thành nhiều phần tùy thích, ví dụ:trong trường hợp của bạn, thành 20 phần (mỗi phần 5%).

;WITH SlicedData AS
(
   SELECT Category, Name, COUNT(Name) Total,
            NTILE(20) OVER(PARTITION BY Category ORDER BY COUNT(Name) DESC) AS  'NTile'
   FROM #TEMP
   GROUP BY Category, Name
)
SELECT *
FROM SlicedData
WHERE NTile > 1

Về cơ bản, điều này sẽ nhóm dữ liệu của bạn theo Category,Name , đơn đặt hàng của người khác (không chắc chắn nếu COUNT(Name) thực sự là thứ bạn muốn ở đây), và sau đó cắt nó thành 20 phần, mỗi phần đại diện cho 5% phân vùng dữ liệu của bạn. Phần với NTile = 1 là phần 5% hàng đầu - chỉ cần bỏ qua phần đó khi chọn từ CTE.

Xem:

để biết thêm thông tin



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bạn kiểm tra sự tồn tại của một người dùng trong SQL Server?

  2. So sánh chuỗi SQL, toán tử lớn hơn và nhỏ hơn

  3. Yêu cầu không thành công với trạng thái HTTP 401:IN SSRS trái phép

  4. Thực thi thủ tục được lưu trữ vào bảng tạm thời động

  5. Tìm kiếm mờ SQL Server với Phần trăm so khớp