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

SQLServerクエリ-グループごとの乗算

    行の値を乗算することは、行の値の対数を加算することと同じです

    秘訣はゼロとヌルを処理することです。

    OK、今すぐ確認

    DECLARE @foo TABLE (GrpID varchar(10), Value float)
    
    INSERt @foo (GrpID, Value)
    SELECT 'Grp1',          2
    UNION ALL SELECT 'Grp1',          5
    UNION ALL SELECT 'Grp1',          3
    UNION ALL SELECT 'Grp2',          3
    UNION ALL SELECT 'Grp2',         -5
    UNION ALL SELECT 'Grp2',         -2
    UNION ALL SELECT 'Grp3',          4
    UNION ALL SELECT 'Grp3',          0
    UNION ALL SELECT 'Grp3',          1
    UNION ALL SELECT 'Grp4',         -2
    UNION ALL SELECT 'Grp4',         -4
    UNION ALL SELECT 'Grp5',          7
    UNION ALL SELECT 'Grp5',       NULL
    UNION ALL SELECT 'Grp6',       NULL
    UNION ALL SELECT 'Grp6',       NULL
    UNION ALL SELECT 'Grp7',         -1
    UNION ALL SELECT 'Grp7',        10 
    
    SELECT
        GrpID,
        CASE
           WHEN MinVal = 0 THEN 0
           WHEN Neg % 2 = 1 THEN -1 * EXP(ABSMult)
           ELSE EXP(ABSMult)
        END
    FROM
        (
        SELECT
           GrpID, 
           --log of +ve row values
           SUM(LOG(ABS(NULLIF(Value, 0)))) AS ABSMult,
           --count of -ve values. Even = +ve result.
           SUM(SIGN(CASE WHEN Value < 0 THEN 1 ELSE 0 END)) AS Neg,
           --anything * zero = zero
           MIN(ABS(Value)) AS MinVal
        FROM
           @foo
        GROUP BY
           GrpID
        ) foo
    


    1. MySQLコネクタとPyMySQLの例を使用したPythonConnectto MySQL Database

    2. MySQL外部キーエラー1005errno150外部キーとしての主キー

    3. PostgreSQLとOracle:コスト、使いやすさ、機能の違い

    4. Oracle SQL DeveloperからExcelにデータをエクスポートする方法は?