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

Set splitsen in ongelijke percentages

Weet niet of ik het goed begrijp...

Allereerst lijkt er hier een nogal voor de hand liggende fout te zijn:

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

Zou dit niet dit moeten zijn:

    WHEN t.bucket >90 THEN 'NULL'

De functie NTILE zal je sets in vrij gelijkmatige emmers verdelen. Controleer mijn output en ontdek hoe dit zich gedraagt ​​in de hoekgevallen. Ik stel voor om een ​​berekend percentage per rij te gebruiken, zoals hier:

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;

--Ik gebruik deze #tmpBuckets-table om dichter bij je Ik heb een tafel te komen scenario

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;

Ik denk dat je weet hoe je zo'n cte moet gebruiken om de brontabel bij te werken. Kom anders gewoon terug met een andere vraag :-)




  1. Doe mee aan samengevoegde zoekopdrachten

  2. Waar kan ik MySQL-logboeken vinden in phpMyAdmin?

  3. Tabelsortering overslaan in phpmyadmin

  4. Kan geen ipc-poort maken; toegang wordt geweigerd in MySQL Workbench