sql >> データベース >  >> RDS >> Sqlserver

集計に基づいて均等なサイズのグループを作成する

    SELECT  *
    FROM(
        SELECT  y.TotalSizeGB,
                CASE 
                    WHEN y.AnotherGrp%2=0 AND y.PseudoGrpNumber=0 THEN 2
                    WHEN y.AnotherGrp%2=0 AND y.PseudoGrpNumber=1 THEN 1
                    WHEN y.AnotherGrp%2=0 AND y.PseudoGrpNumber=2 THEN 0
                    ELSE y.PseudoGrpNumber
                END GrpNumber
        FROM(
            SELECT 
                x.ServerName,
                x.TotalSizeGB,
                (2+ROW_NUMBER() OVER(ORDER BY x.TotalSizeGB DESC))%3 PseudoGrpNumber,
                (2+ROW_NUMBER() OVER(ORDER BY x.TotalSizeGB DESC))/3 AnotherGrp,
                ROW_NUMBER() OVER(ORDER BY x.TotalSizeGB DESC) RowNum
            FROM    @Servers x
        )y
    )z
    PIVOT( SUM(z.TotalSizeGB) FOR z.GrpNumber IN([0],[1],[2]) ) pvt;
    

    結果:

    0       1       2
    ------- ------- -------
    2048.02 1925.80 2037.14
    

    いくつかの説明:

    TotalSizeGB の降順でデータを並べ替えるという考え方です。 桁。次に、連続する 3 行ごとにグループ化されます (列 AnotherGrp ) DESC の最初 注文してから ASC で order (列 PseudoGroNumber および GrpNumber )。実行された場合 SELECT * FROM () y 派生テーブルの場合、結果は次のようになります:

    ServerName TotalSizeGB  PseudoGrpNumber AnotherGrp GrpNumber RowNum
    ---------- ------------ --------------- ---------- --------- ------
    Server10   1023.35      0               1          0         1
    Server9    901.23       1               1          1         2
    Server8    890.12       2               1          2         3
    Server7    789.01       0               2          2         4
    Server6    678.90       1               2          1         5
    Server5    567.89       2               2          0         6
    Server4    456.78       0               3          0         7
    Server3    345.67       1               3          1         8
    Server2    234.56       2               3          2         9
    Server1    123.45       0               4          2         10
    


    1. MS-SQLにSHA1()に相当するものはありますか?

    2. MAC OSX10.6でのMySQLCAPIのコンパイル問題

    3. ツリーテーブルのSQLクエリ

    4. 増分番号で条件を満たすレコードを更新します