sql >> Databáze >  >> Database Tools >> SSMS

Rozdělte sadu na nerovnoměrné procentuální segmenty

Nevím, jestli to chápu správně...

Za prvé, zdá se, že zde došlo k poměrně zjevné chybě:

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

Nemělo by to být toto:

    WHEN t.bucket >90 THEN 'NULL'

Funkce NTILE rozloží vaše sady do spíše rovnoměrných kbelíků. Zkontrolujte můj výstup a zjistěte, jak se to chová v rohových pouzdrech. Navrhuji použít vypočítané procento na řádek jako zde:

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;

--Používám tuto #tmpBuckets-table, abych se přiblížil vašemu Mám stůl scénář

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;

Myslím, že víte, jak použít takový cte k aktualizaci zdrojové tabulky. Jinak se vraťte s další otázkou :-)




  1. Databáze PhpMyAdmin a Mysql

  2. SQL Server Management Studio nemůže rozpoznat soubor .bak

  3. Jak mohu vrátit výsledky vyhledávání mysql, kde jsou zobrazeny pouze sloupce s nenulovými položkami

  4. Jak napíšu SP v phpMyAdmin (MySQL)?