Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara memilih TOP 5 PERCENT dari setiap grup?

Anda dapat menggunakan CTE (Common Table Expression) yang dipasangkan dengan NTILE fungsi windowing - ini akan mengiris data Anda menjadi irisan sebanyak yang Anda butuhkan, mis. dalam kasus Anda, menjadi 20 irisan (masing-masing 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

Ini pada dasarnya mengelompokkan data Anda berdasarkan Category,Name , dipesan oleh sesuatu yang lain (tidak yakin apakah COUNT(Name) benar-benar hal yang Anda inginkan di sini), dan kemudian mengirisnya menjadi 20 bagian, masing-masing mewakili 5% dari partisi data Anda. Irisan dengan NTile = 1 adalah potongan 5% teratas - abaikan saja saat memilih dari CTE.

Lihat:

untuk info lebih lanjut



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mendapatkan hasil prosedur tersimpan SQL ke dalam format data.frame menggunakan RODBC

  2. Kesalahan SQL Server 4104:Pengidentifikasi multi-bagian tidak dapat diikat.

  3. Batas memori di SQL Server 2016 SP1

  4. Periksa apakah server SQL (versi apa pun) diinstal?

  5. Cara Menghasilkan Data Uji di SQL Server