PostgreSQLでは、SUM()
関数は、null以外の入力値の合計を計算し、結果を返します。
つまり、数値を加算して結果を返します。
例
これがどのように機能するかを示す簡単な例です:
SELECT SUM(amount)
FROM payment;
結果:
67416.51
この場合、amount
payment
の列です テーブル。
これをもう少し詳しく説明するために、表のスナップショットを次に示します。
+------------+-------------+----------+-----------+--------+----------------------------+ | payment_id | customer_id | staff_id | rental_id | amount | payment_date | +------------+-------------+----------+-----------+--------+----------------------------+ | 16050 | 269 | 2 | 7 | 1.99 | 2017-01-24 21:40:19.996577 | | 16051 | 269 | 1 | 98 | 0.99 | 2017-01-25 15:16:50.996577 | | 16052 | 269 | 2 | 678 | 6.99 | 2017-01-28 21:44:14.996577 | | 16053 | 269 | 2 | 703 | 0.99 | 2017-01-29 00:58:02.996577 | | 16054 | 269 | 1 | 750 | 4.99 | 2017-01-29 08:10:06.996577 | | 16055 | 269 | 2 | 1099 | 2.99 | 2017-01-31 12:23:14.996577 | | 16056 | 270 | 1 | 193 | 1.99 | 2017-01-26 05:10:14.996577 | | 16057 | 270 | 1 | 1040 | 4.99 | 2017-01-31 04:03:42.996577 | | 16058 | 271 | 1 | 1096 | 8.99 | 2017-01-31 11:59:15.996577 | ...
amount
を確認できます この例で追加した列。
表にはそれよりもはるかに多くのデータが含まれていますが、これは、合計した値のスナップショットを示しています。
フィルタリングされた結果
SUM()
関数は、クエリによって返された行を操作します。したがって、結果をフィルタリングすると、SUM()
の結果になります。 それを反映します。
結果をフィルタリングしましょう:
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
結果:
129.70
そのため、今回は顧客269が支払ったすべての金額の合計を取得しました。
DISTINCT
キーワード
DISTINCT
を使用できます SUM()
を含むキーワード 個別の値のみを計算します。つまり、重複する値がある場合、それらは1つの値として扱われます。
例:
SELECT
SUM(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
結果:
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
この例では、DISTINCT
の結果を比較します 省略しないオプション。
この場合、非常に大きな違いがあります。これは、その列に重複する値が多数あることを示しています。
これを確認するために、次のような個別の値を出力できます。
SELECT DISTINCT amount
FROM payment;
結果:
+--------+ | amount | +--------+ | 1.99 | | 3.98 | | 7.99 | | 5.99 | | 10.99 | | 2.99 | | 8.97 | | 8.99 | | 3.99 | | 9.98 | | 11.99 | | 7.98 | | 6.99 | | 0.00 | | 4.99 | | 5.98 | | 0.99 | | 1.98 | | 9.99 | +--------+ (19 rows)
したがって、この例では、これらの個別の値をすべて合計しました。