SSMS
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> SSMS

Chia tập hợp thành các nhóm tỷ lệ phần trăm không đồng đều

Không biết, nếu tôi hiểu đúng ...

Trước hết, dường như có một sai lầm khá rõ ràng ở đây:

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

Không nên thế này:

    WHEN t.bucket >90 THEN 'NULL'

Hàm NTILE sẽ dàn trải các bộ của bạn thành các nhóm khá đồng đều. Kiểm tra đầu ra của tôi và tìm cách hoạt động của điều này trong các trường hợp góc. Tôi khuyên bạn nên sử dụng tỷ lệ phần trăm được tính toán trên mỗi hàng như sau:

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;

--Tôi sử dụng # tmpBuckets-table này để đến gần hơn với Tôi có một cái bàn của bạn kịch bả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;

Tôi nghĩ rằng bạn biết, làm thế nào để sử dụng một cte như vậy để cập nhật bảng nguồn. Nếu không, chỉ cần quay lại với một câu hỏi khác :-)




  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Nhóm các bảng theo lược đồ trong SSMS

  2. Lỗi máy chủ Microsoft SQL:18456

  3. Làm cách nào để kiểm tra xem kết quả SQL có chứa ký tự dòng mới hay không?

  4. Phím tắt để tự động bọc văn bản đã chọn trong IsNull ([text], 0) trong SSMS

  5. làm thế nào để nhập các giá trị trong cột rowguid?