sql >> データベース >  >> Database Tools >> SSMS

セットを不均一なパーセンテージのバケットに分割

    これを正しく取得したかどうかはわかりません...

    まず第一に、ここにはかなり明らかな間違いがあるようです:

        WHEN t.bucket > 60 AND t.bucket <=90 THEN 'NULL'
    

    これはこれではありません:

        WHEN t.bucket >90 THEN 'NULL'
    

    関数NTILE セットをかなり均等なバケツに広げます。私の出力をチェックして、これがコーナーケースでどのように動作するかを見つけてください。次のように、行ごとに計算されたパーセンテージを使用することをお勧めします:

    WITH tally
    (vals, bucket)
    AS
    (
        SELECT
             DATEADD(DAY, - ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), GETDATE())
            ,NTILE(100) OVER (ORDER BY (SELECT NULL))
        FROM
        (
            VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0)) AS a(n)
            CROSS JOIN (VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0)) AS b(n)
            CROSS JOIN (VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0)) AS c(n)
        )
    SELECT *
    INTO #tmpBuckets
    FROM Tally;
    

    -私はこの#tmpBuckets-tableを使用して、テーブルがありますに近づきます。 シナリオ

    WITH Numbered AS
    (
        SELECT *
              ,ROW_NUMBER() OVER(ORDER BY vals DESC) / ((SELECT COUNT(*) FROM #tmpBuckets)/100.0)  AS RunningPercentage
        FROM #tmpBuckets
    )
    ,ComputeBuckets AS
    (
        SELECT
         t.*
        , CASE
            WHEN t.RunningPercentage <= 35 THEN 'a'
            WHEN t.RunningPercentage > 35 AND t.RunningPercentage <=60 THEN 'b'
            WHEN t.RunningPercentage > 60 AND t.RunningPercentage <=90 THEN 'c'
            WHEN t.RunningPercentage >90  THEN 'NULL'
        END AS ShnugoMethod
        , CASE
            WHEN t.bucket <= 35 THEN 'a'
            WHEN t.bucket > 35 AND t.RunningPercentage <=60 THEN 'b'
            WHEN t.bucket > 60 AND t.RunningPercentage <=90 THEN 'c'
            WHEN t.bucket > 90  THEN 'NULL'
        END AS ZikatoMethod
        FROM Numbered t
    )
    SELECT cb.*
    FROM ComputeBuckets cb
    ORDER BY cb.vals DESC
    
    GO
    DROP TABLE #tmpBuckets;
    

    このようなcteを使用してソーステーブルを更新する方法をご存知だと思います。それ以外の場合は、別の質問で戻ってきてください:-)




    1. 新しいバージョンのDBeaverEE7.2をダウンロードすることを忘れないでください

    2. Pythonを使用してMysqlにデータをロードします

    3. phpMyAdminエラー:mbstring拡張機能がありません。 PHP構成を確認してください

    4. SSMSで、SQLクエリウィンドウのタブ名を変更するにはどうすればよいですか?