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

SUM() のような SQL で列内のすべての値を乗算する方法

    ROUND の組み合わせを使用する 、 EXP , SUM および ログ

    SELECT ROUND(EXP(SUM(LOG([Col A]))),1)
    FROM yourtable
    

    SQL フィドル:http://sqlfiddle.com/#!3/d43c8/2/ 0

    説明

    ログ col a ex の対数を返します。 LOG([Col A]) 戻る

    0
    0.6931471805599453
    1.0986122886681098
    1.3862943611198906
    

    次に SUM を使用します それらをすべて一緒に追加するには SUM(LOG([Col A])) 戻る

    3.1780538303479453
    

    次に、その結​​果の指数が EXP(SUM(LOG(['3.1780538303479453'])) を使用して計算されます 戻る

    23.999999999999993
    

    次に、これは最終的に ROUND を使用して丸められます ROUND(EXP(SUM(LOG('23.999999999999993'))),1) 24 を取得する

    追加回答

    簡単な解決方法:

    0 の場合 あなたのデータで

    SELECT ROUND(EXP(SUM(LOG([Col A]))),1)
    FROM yourtable
    WHERE [Col A] != 0
    

    0しかない場合 次に、上記の結果は NULL になります .

    SELECT (ROUND(exp(SUM(log(CASE WHEN[Col A]<0 THEN [Col A]*-1 ELSE [Col A] END))),1)) * 
    (CASE (SUM(CASE WHEN [Col A] < 0 THEN 1 ELSE 0 END) %2) WHEN 1 THEN -1 WHEN 0 THEN 1 END) AS [Col A Multi]
    FROM yourtable
    

    入力例:

    1
    2
    3
    -4
    

    出力:

    Col A Multi
    -24
    

    SQL フィドル:http://sqlfiddle.com/#!3/01ddc/3/ 0



    1. 2つのテーブルの行で条件が一致した場合にIDを返すクエリを作成する

    2. 同じクエリ内の複数のテーブルのALTER列

    3. htmlエンティティをデータベースに保存しますか?または、取得時に変換しますか?

    4. 複数の値に一致するレコードのグループを検索します