SQL GROUP BY句とHAVING句で条件付きSUM集計:グループ化されたデータの分析
SQLにおける条件付きSUM集計
WHERE句を使用した条件付きSUM
最も基本的な方法は、WHERE
句を使用して条件を指定することです。この方法は、単純な条件に適しています。
SELECT SUM(column_name)
FROM table_name
WHERE condition;
例: 特定の顧客の注文合計を計算する
SELECT SUM(order_amount)
FROM orders
WHERE customer_id = 123;
HAVING句を使用した条件付きSUM
HAVING
句は、GROUP BY
句と共に使用して、集計結果に対して条件を指定することができます。これは、グループ化されたデータに対して条件付きSUMを適用する場合に役立ちます。
SELECT column_name, SUM(column_name) AS sum_value
FROM table_name
GROUP BY group_column
HAVING condition;
例: 各製品カテゴリの平均在庫数を計算する
SELECT product_category, AVG(stock_quantity) AS avg_stock
FROM products
GROUP BY product_category
HAVING avg_stock > 50;
CASE式を使用した条件付きSUM
より複雑な条件処理には、CASE
式を使用することができます。この方法は、複数の条件に基づいてSUMを計算する場合に役立ちます。
SELECT SUM(CASE WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE 0
END) AS sum_value
FROM table_name;
例: 特定のステータスを持つ注文の合計金額を計算する
SELECT SUM(CASE WHEN order_status = 'shipped' THEN order_amount ELSE 0 END) AS shipped_order_total
FROM orders;
SQLにおける条件付きSUM集計は、さまざまな分析タスクに役立つ強力な機能です。上記の基本的な方法に加え、より複雑な条件処理にはサブクエリやウィンドウ関数なども利用できます。
この例では、WHERE
句を使用して、顧客IDが123の注文の合計金額を計算します。
SELECT customer_id, SUM(order_amount) AS total_order_amount
FROM orders
WHERE customer_id = 123;
出力:
customer_id | total_order_amount |
---|---|
123 | 1000.00 |
この例では、GROUP BY
句とHAVING
句を使用して、各製品カテゴリの平均在庫数を計算します。また、CASE
式を使用して、在庫数が50以上のカテゴリのみを表示します。
SELECT product_category, AVG(stock_quantity) AS avg_stock
FROM products
GROUP BY product_category
HAVING avg_stock > 50
ORDER BY avg_stock DESC;
product_category | avg_stock |
---|---|
Electronics | 75.00 |
Clothing | 62.50 |
Home Appliances | 55.00 |
SELECT SUM(CASE WHEN order_status = 'shipped' THEN order_amount ELSE 0 END) AS shipped_order_total
FROM orders;
shipped_order_total |
---|
2500.00 |
これらのサンプルコードは、SQLにおける条件付きSUM集計の基本的な使用方法を示しています。具体的なニーズに合わせて、これらのコードを調整することができます。
SQLにおける条件付きSUM集計のその他の方法
サブクエリを使用して、条件付きのSUM値を計算することができます。この方法は、より複雑な条件処理が必要な場合に役立ちます。
SELECT SUM(order_amount)
FROM orders
WHERE order_date IN (
SELECT order_date
FROM orders
WHERE discount_rate > 0
);
例: 各注文の合計金額と、その注文より前の注文の合計金額を表示する
SELECT order_id, order_amount,
SUM(order_amount) OVER (ORDER BY order_id) AS running_total
FROM orders;
結合を使用して、別のテーブルから条件に基づいて値を取得し、SUM計算に含めることができます。この方法は、複数のテーブルからデータを分析する場合に役立ちます。
例: 顧客ごとに注文合計と顧客ランクを表示する
SELECT c.customer_id, c.customer_rank, SUM(o.order_amount) AS total_order_amount
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_rank;
これらの方法は、それぞれ異なる利点と欠点があります。状況に応じて適切な方法を選択することが重要です。
SQLにおける条件付きSUM集計は、さまざまな分析タスクに役立つ強力な機能です。基本的な方法に加え、サブクエリ、ウィンドウ関数、結合などの方法を活用することで、より複雑な分析も可能になります。
具体的なニーズに合わせて、適切な方法を選択し、効果的に活用してください。
sql