sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLのAVG()関数

    PostgreSQLでは、AVG() 関数は、null以外のすべての入力値の平均(算術平均)を計算し、結果を返します。

    これがどのように機能するかを示す簡単な例です:

    SELECT AVG(amount) 
    FROM payment;

    結果:

    4.2006673312979002

    この場合、amount paymentの列です テーブル。

    これにもう少しコンテキストを与えるために、ここにテーブルのスナップショットがあります(pagilaから) サンプルデータベース):

    +------------+-------------+----------+-----------+--------+----------------------------+
    | 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を確認できます 平均を計算した列。

    テーブルにはさらに多くの行が含まれていますが、これは値の例を示しています。

    フィルタリングされた結果

    AVG() 関数は、クエリによって返された行を操作します。したがって、結果をフィルタリングすると、AVG()の結果になります。 それを反映します。

    結果をフィルタリングしましょう:

    SELECT AVG(amount) 
    FROM payment
    WHERE customer_id = 271;

    結果:

    3.8233333333333333

    そのため、今回は、顧客271が支払ったすべての金額の平均を取得しました。

    DISTINCT キーワード

    DISTINCTを使用できます AVG()を含むキーワード 個別の値のみを計算します。つまり、重複する値がある場合、それらは1つの値として扱われます。

    例:

    SELECT 
        AVG(amount) AS "All",
        AVG(DISTINCT amount) AS "Distinct"
    FROM payment;

    結果:

    +--------------------+--------------------+
    |        All         |      Distinct      |
    +--------------------+--------------------+
    | 4.2006673312979002 | 6.1447368421052632 |
    +--------------------+--------------------+

    この場合、明確な結果と明確でない結果の間には非常に大きな違いがあります。これは、その列に重複する値がたくさんあることを示しています。

    これを確認するために、次のような個別の値を出力できます。

    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)

    したがって、この例では、これらの個別の値の平均が返されました。


    1. Python FlaskとMySQLを使用してゼロからWebアプリを作成する:パート3

    2. MySQLWorkbenchを使用してMySQLを停止/開始する方法

    3. PostgreSQLの高可用性の管理–パートI:PostgreSQLの自動フェイルオーバー

    4. SQLServerのSalesforceSOQL