メインコンテンツへスキップ
メインコンテンツへスキップ

sumIf

説明

If コンビネーターは sum 関数に適用でき、条件が真となる行の値だけを合計する sumIf 集約コンビネーター関数を使用して計算できます。

使用例

この例では、成功フラグ付きの売上データを保存するテーブルを作成し、 sumIf を使用して成功したトランザクションの総売上金額を計算します。

CREATE TABLE sales(
    transaction_id UInt32,
    amount Decimal(10,2),
    is_successful UInt8
) ENGINE = Log;

INSERT INTO sales VALUES
    (1, 100.50, 1),
    (2, 200.75, 1),
    (3, 150.25, 0),
    (4, 300.00, 1),
    (5, 250.50, 0),
    (6, 175.25, 1);

SELECT
    sumIf(amount, is_successful = 1) AS total_successful_sales
FROM sales;

sumIf 関数は、is_successful = 1 の行の金額のみを合計します。 この場合、次の値を合計します: 100.50 + 200.75 + 300.00 + 175.25。

   ┌─total_successful_sales─┐
1. │                  776.50 │
   └───────────────────────┘

価格方向別に出来高を計算する

この例では、ClickHouse playground で利用可能な stock テーブルを使用して、 2002 年前半における価格方向別の出来高を計算します。

SELECT 
    toStartOfMonth(date) AS month,
    formatReadableQuantity(sumIf(volume, price > open)) AS volume_on_up_days,
    formatReadableQuantity(sumIf(volume, price < open)) AS volume_on_down_days,
    formatReadableQuantity(sumIf(volume, price = open)) AS volume_on_neutral_days,
    formatReadableQuantity(sum(volume)) AS total_volume
FROM stock.stock
WHERE date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY month
ORDER BY month;
    ┌──────month─┬─volume_on_up_days─┬─volume_on_down_days─┬─volume_on_neutral_days─┬─total_volume──┐
 1. │ 2002-01-01 │ 260.7億     │ 307.4億       │ 7億8180万         │ 575.9億 │
 2. │ 2002-02-01 │ 208.4億     │ 296.0億       │ 6億4236万         │ 510.9億 │
 3. │ 2002-03-01 │ 288.1億     │ 235.7億       │ 7億6260万         │ 531.4億 │
 4. │ 2002-04-01 │ 247.2億     │ 309.9億       │ 7億6392万         │ 564.7億 │
 5. │ 2002-05-01 │ 250.9億     │ 305.7億       │ 8億5857万         │ 565.2億 │
 6. │ 2002-06-01 │ 291.0億     │ 308.8億       │ 8億7571万         │ 608.6億 │
 7. │ 2002-07-01 │ 322.7億     │ 417.3億       │ 7億4732万         │ 747.5億 │
 8. │ 2002-08-01 │ 285.7億     │ 274.9億       │ 11.7億           │ 572.4億 │
 9. │ 2002-09-01 │ 233.7億     │ 310.2億       │ 7億7566万         │ 551.7億 │
10. │ 2002-10-01 │ 385.7億     │ 340.5億       │ 9億5648万         │ 735.7億 │
11. │ 2002-11-01 │ 349.0億     │ 254.7億       │ 9億9834万         │ 613.7億 │
12. │ 2002-12-01 │ 229.9億     │ 286.5億       │ 11.4億           │ 527.9億 │
    └────────────┴───────────────────┴─────────────────────┴────────────────────────┴───────────────┘

株式銘柄別の取引量を計算する

この例では、ClickHouse playground で利用可能な stock テーブルを使用し、 2006 年における当時の大手テクノロジー企業 3 社の銘柄シンボルごとの取引量を算出します。

SELECT 
    toStartOfMonth(date) AS month,
    formatReadableQuantity(sumIf(volume, symbol = 'AAPL')) AS apple_volume,
    formatReadableQuantity(sumIf(volume, symbol = 'MSFT')) AS microsoft_volume,
    formatReadableQuantity(sumIf(volume, symbol = 'GOOG')) AS google_volume,
    sum(volume) AS total_volume,
    round(sumIf(volume, symbol IN ('AAPL', 'MSFT', 'GOOG')) / sum(volume) * 100, 2) AS major_tech_percentage
FROM stock.stock
WHERE date BETWEEN '2006-01-01' AND '2006-12-31'
GROUP BY month
ORDER BY month;
    ┌──────month─┬─apple_volume───┬─microsoft_volume─┬─google_volume──┬─total_volume─┬─major_tech_percentage─┐
 1. │ 2006-01-01 │ 7億8221万 │ 13億9000万     │ 2億9969万 │  84343937700 │                  2.93 │
 2. │ 2006-02-01 │ 6億7038万 │ 10億5000万     │ 2億9765万 │  73524748600 │                  2.74 │
 3. │ 2006-03-01 │ 7億4485万 │ 13億9000万     │ 2億8836万 │  87960830800 │                  2.75 │
 4. │ 2006-04-01 │ 7億1897万 │ 14億5000万     │ 1億8565万 │  78031719800 │                  3.02 │
 5. │ 2006-05-01 │ 5億5789万 │ 23億2000万     │ 1億7494万 │  97096584100 │                  3.14 │
 6. │ 2006-06-01 │ 6億4148万 │ 19億8000万     │ 1億4255万 │  96304086800 │                  2.87 │
 7. │ 2006-07-01 │ 6億2493万 │ 13億3000万     │ 1億2774万 │  79940921800 │                  2.61 │
 8. │ 2006-08-01 │ 6億3935万 │ 11億3000万     │ 1億716万 │  84251753200 │                  2.23 │
 9. │ 2006-09-01 │ 6億3345万 │ 11億0000万     │ 1億2172万 │  82775234300 │                  2.24 │
10. │ 2006-10-01 │ 5億1482万 │ 12億9000万     │ 1億5890万 │  93406712600 │                   2.1 │
11. │ 2006-11-01 │ 4億9437万 │ 12億4000万     │ 1億1849万 │  90177365500 │                  2.06 │
12. │ 2006-12-01 │ 6億395万 │ 11億4000万     │ 9177万  │  80499584100 │                  2.28 │
    └────────────┴────────────────┴──────────────────┴────────────────┴──────────────┴───────────────────────┘

関連項目