顧客と商品を跨ぐ売上分析:結合とPIVOTテーブルで柔軟な集計
PostgreSQLで複数の列の合計を計算する方法
単一の列の合計
最も基本的な方法は、SUM
関数と列名を指定することです。 例えば、orders
テーブルのamount
列の合計を計算するには、次のようなクエリを実行します。
SELECT SUM(amount) AS total_amount
FROM orders;
このクエリは、total_amount
という名前の新しい列に、orders
テーブルのamount
列の合計値を出力します。
SELECT SUM(amount) AS total_amount, SUM(tax) AS total_tax
FROM orders;
条件付きの合計
WHERE
句を使用して、条件付きで合計を計算することもできます。 例えば、orders
テーブルのうち、status
がshipped
である注文のamount
列の合計を計算するには、次のようなクエリを実行します。
SELECT SUM(amount) AS total_amount
FROM orders
WHERE status = 'shipped';
グループ化による合計
GROUP BY
句を使用して、列をグループ化し、グループごとに合計を計算することもできます。 例えば、orders
テーブルをcustomer_id
でグループ化し、各顧客の注文の合計金額を計算するには、次のようなクエリを実行します。
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id;
このクエリは、customer_id
とtotal_amount
という2つの列を持つ結果セットを出力します。 各行には、customer_id
と、その顧客の注文の合計金額が表示されます。
SELECT product_id, SUM(quantity) AS total_quantity
FROM orders
GROUP BY product_id
DISTINCT;
これらの例は、PostgreSQLで複数の列の合計を計算するための基本的な方法を示しています。 より複雑な集計や分析を行うには、AVG
、COUNT
、MIN
、MAX
などの他の集計関数を使用することができます。
PostgreSQL で複数の列の合計を計算するサンプルコード
この例では、orders
テーブルのamount
列の合計を計算します。
SELECT SUM(amount) AS total_amount
FROM orders;
SELECT SUM(amount) AS total_amount, SUM(tax) AS total_tax
FROM orders;
この例では、orders
テーブルのうち、status
がshipped
である注文のamount
列の合計を計算します。
SELECT SUM(amount) AS total_amount
FROM orders
WHERE status = 'shipped';
この例では、orders
テーブルをcustomer_id
でグループ化し、各顧客の注文の合計金額を計算します。
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id;
例5:DISTINCTキーワードの使用
SELECT product_id, SUM(quantity) AS total_quantity
FROM orders
GROUP BY product_id
DISTINCT;
SELECT SUM(total) AS grand_total
FROM (
SELECT SUM(amount) AS total_amount
FROM orders
) AS amount_table
CROSS JOIN (
SELECT SUM(tax) AS total_tax
FROM orders
) AS tax_table;
WITH order_summary AS (
SELECT customer_id, SUM(amount) AS total_amount, AVG(amount) AS average_price
FROM orders
GROUP BY customer_id
)
SELECT * FROM order_summary;
SELECT order_id, amount,
SUM(amount) OVER (ORDER BY order_id ROWS BETWEEN PRECEDING 1 AND CURRENT ROW) AS running_total
FROM orders;
SELECT c.customer_name, SUM(o.amount) AS total_amount
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
GROUP BY c.customer_name;
SELECT *
FROM orders
PIVOT (
SUM(quantity)
FOR product_id IN (
SELECT DISTINCT product_id
FROM orders
)
) AS order_summary;
これらの方法は、それぞれ異なる利点と欠点があります。 最適な方法は、特定のニーズと要件によって異なります。
postgresql