sql >> データベース >  >> RDS >> Sqlserver

各グループから上位 5 パーセントを選択するにはどうすればよいですか?

    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 から選択するときは無視してください。

    参照:

    詳細については



    1. 接続を使用してmysqlerdを生成する

    2. OR-ed条件を含む高度なインデックス作成(pgsql)

    3. ロギング ODBC、SQL Server

    4. MySQLでNULL値をカウントする方法は?