5

売上の合計を取得する次のクエリがあります。

SELECT SUM(sales)
FROM 
    (SELECT sales FROM ...) combined

ここで、税金を控除する特定の通貨に基づいて条件付き減算を追加する必要があります。擬似コードでは次のようになります。

SELECT SUM(sales) - (SUM(sales) IF currency IN ('jpy', 'aud') * 0.05)
FROM 
    (SELECT sales FROM ...) combined

この条件付き SUM またはサブクエリを作成するにはどうすればよいですか?

4

4 に答える 4

3

加算中に係数を適用できます。

SELECT SUM(CASE WHEN currency IN ('jpy', 'aud') 
                THEN sales * 0.95
                ELSE sales
            END)
FROM combined

CASEには 2 つの形式があります。これは、WHEN の後に指定されたブール式が true に評価されるかどうかをチェックします。一致する場合は、売上を 5% 縮小して返します。そうでない場合は、ELSE の後に式を返します。WHEN...THEN ペアを組み合わせることができます。true と評価された最初のものは、THEN の後に式を返します。

質問で提案したように、次のように、JPY と AUD から TAX を差し引いて、これを行った可能性があります。

SELECT SUM(sales) 
     - ifnull (SUM(CASE WHEN currency IN ('jpy', 'aud') 
                        THEN sales * 0.05
                    END), 0)
FROM combined

しかし、それはクエリにはまったく役立ちません。

于 2012-06-03T19:46:55.783 に答える
2

選択肢は 2 つしかないため、次のIF()関数を使用することもできます。

SELECT SUM(sales * IF(currency IN ('jpy', 'aud'), 0.95, 1))
FROM combined

別の方法は、暗黙のブール変換を次のように使用すること0です1

SELECT SUM(sales * (1 - currency IN ('jpy', 'aud') * 0.05))

currency IN ('jpy', 'aud')ブール式は、(false の場合) または (true の場合) のいずれかに暗黙的に変換され、0それ1に応じて または のいずれsales * (1 - 0)かになりsales * (1 - 0.05)ます。

于 2012-06-03T20:00:25.403 に答える
1

アレックスはちょうどいいと思います。私はあなたがjpyとusdなどを混ぜることができないと仮定したので、通貨でグループ化する必要があります、すなわち

SELECT currency, 
       SUM(sales) * (1 - CASE WHEN currency IN ('jpy', 'aud') 
                            THEN .05 -- 5% Tax
                         ELSE 
                            0 -- No tax
                         END)
FROM
(
    SELECT 'aud' as currency, 10.00 as sales
    UNION 
    SELECT 'usd' as currency, 20.00 as sales
    UNION
    SELECT 'gbp' as currency, 30.00 as sales
    UNION 
    SELECT 'jpy' as currency, 40.00 as sales
) salesdata
GROUP BY currency

戻り値

aud 9.50
gbp 30.00
jpy 38.00
usd 20.00

jpyとaudの合計から5%を差し引く

于 2012-06-03T19:42:51.870 に答える
1
select sum(sales) - case when (currency in ('jpy', 'aud') then (Sum(sales) * .05) else 0 end

(TSQL または mysql?)

于 2012-06-03T19:33:52.330 に答える