sql >> Database teknologi >  >> Database Tools >> SSMS

Opdel sæt i ujævne procentsatser

Ved ikke, om jeg forstår det rigtigt...

Først og fremmest ser der ud til at være en ret åbenlys fejl her:

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

Skulle dette ikke være dette:

    WHEN t.bucket >90 THEN 'NULL'

Funktionen NTILE vil sprede dine sæt i ret jævne spande. Tjek mit output og find ud af, hvordan dette opfører sig i hjørnekasserne. Jeg foreslår at bruge en beregnet procentdel pr. række som her:

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;

--Jeg bruger denne #tmpBuckets-tabel til at komme tættere på din Jeg har et bord scenarie

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;

Jeg tror, ​​du ved, hvordan man bruger sådan en cte til at opdatere kildetabellen. Ellers vend bare tilbage med et andet spørgsmål :-)




  1. Valg af MYSQL-kolonne betinget

  2. Sådan opretter du forbindelse til sqlite-database med adgangskode

  3. Problemer med databaselinks på phpmyadmin-grænsefladen

  4. Er det muligt at rette en fremmednøgle i Yii uden at have sat den op i databasen?