NTILE
と組み合わせて CTE (Common Table Expression) を使用できます ウィンドウ関数 - これは、データを必要な数のスライスにスライスします。あなたの場合、20 スライス (それぞれ 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
プレ>これは基本的に
Category,Name
でデータをグループ化します 、別の注文 (COUNT(Name)
かどうかは不明) ここで実際に必要なもの)、それを 20 個の断片にスライスします。それぞれがデータ パーティションの 5% を表します。NTile = 1
のスライス は上位 5% のスライスです。CTE から選択するときは無視してください。参照:
- NTILE に関する MSDN ドキュメント
- SQL Server 2005 ランキング関数
- SQL SERVER – 2005 – RANKING 関数のサンプル例 – ROW_NUMBER、RANK、DENSE_RANK、NTILE
詳細については