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

AVG()–MySQLの列の平均値を計算します

    MySQLを使用する場合は、AVG()を使用できます。 値の範囲から平均値を計算する関数。

    たとえば、この関数を使用して、特定の国または州の平均都市人口を調べることができます。国には多くの都市があり、それぞれが異なる人口を持っていることを考えると、それらの間の平均が何であるかを知ることができます。ある都市の人口はたとえば50,000人で、別の都市の人口は500,000人です。 AVG() 関数が平均を計算します。

    構文

    AVG()の構文 このようになります:

    AVG([DISTINCT] expr) [over_clause]

    expr 平均が必要な式です。

    over_clause ウィンドウ関数で機能するオプションの句です。ウィンドウ関数が機能する方法は、クエリの各行について、その行に関連する行を使用して計算を実行することです。この場合、over_clause ウィンドウ関数で処理するためにクエリ行をグループに分割する方法を指定します。 over_clauseに注意してください DISTINCTを使用しない場合にのみ使用できます キーワード。

    生データ

    まず、このページの例で使用する生データは次のとおりです。

    SELECT Name, District, Population
    FROM City
    WHERE CountryCode = 'AUS';

    結果:

    +---------------+-----------------+------------+
    | Name          | District        | Population |
    +---------------+-----------------+------------+
    | Sydney        | New South Wales |    3276207 |
    | Melbourne     | Victoria        |    2865329 |
    | Brisbane      | Queensland      |    1291117 |
    | Perth         | West Australia  |    1096829 |
    | Adelaide      | South Australia |     978100 |
    | Canberra      | Capital Region  |     322723 |
    | Gold Coast    | Queensland      |     311932 |
    | Newcastle     | New South Wales |     270324 |
    | Central Coast | New South Wales |     227657 |
    | Wollongong    | New South Wales |     219761 |
    | Hobart        | Tasmania        |     126118 |
    | Geelong       | Victoria        |     125382 |
    | Townsville    | Queensland      |     109914 |
    | Cairns        | Queensland      |      92273 |
    +---------------+-----------------+------------+

    基本的な例

    上記の生データからわかるように、一部の「地区」には複数の都市があり、各都市の人口は異なります。 AVG()を使用できます 各地区内の都市の平均人口を見つける関数:

    SELECT District, AVG(Population) AS 'Average Population'
    FROM City
    WHERE CountryCode = 'AUS'
    AND District = 'New South Wales';

    結果:

    +-----------------+--------------------+
    | District        | Average Population |
    +-----------------+--------------------+
    | New South Wales |        998487.2500 |
    +-----------------+--------------------+

    したがって、ニューサウスウェールズ州の平均都市人口は998487.2500であることがわかります。

    平均の四捨五入

    前の例の結果が非常に正確であることに気付いたと思います。結果は小数点以下4桁に返されます。私たちの場合、これはおそらく少し多すぎます。小数点以下第4位までの結果は必要ありません。したがって、ROUND()を使用できます 最も近い整数(または必要に応じて指定された小数点以下の桁数)に丸める関数。

    結果を最も近い整数に丸める例を次に示します。

    SELECT District, ROUND(AVG(Population)) AS 'Average Population'
    FROM City
    WHERE CountryCode = 'AUS'
    AND District = 'New South Wales';

    結果:

    +-----------------+--------------------+
    | District        | Average Population |
    +-----------------+--------------------+
    | New South Wales |             998487 |
    +-----------------+--------------------+

    デフォルトでは、ROUND() 関数は最も近い整数に丸めます。または、小数点以下の桁数を指定する2番目の引数を指定することもできますが、この場合は必要ありません。

    GROUPBY句

    GROUP BYを使用できます 各地区/州をそれらの平均都市人口とともにリストする条項:

    SELECT District, ROUND(AVG(Population)) AS 'Average Population'
    FROM City
    WHERE CountryCode = 'AUS'
    GROUP BY District;

    結果:

    +-----------------+--------------------+
    | District        | Average Population |
    +-----------------+--------------------+
    | New South Wales |             998487 |
    | Victoria        |            1495356 |
    | Queensland      |             451309 |
    | West Australia  |            1096829 |
    | South Australia |             978100 |
    | Capital Region  |             322723 |
    | Tasmania        |             126118 |
    +-----------------+--------------------+

    ORDERBY句

    ORDER BYを使用することもできます 順序付けする列を指定する句:

    SELECT District, ROUND(AVG(Population)) AS 'Average Population'
    FROM City
    WHERE CountryCode = 'AUS'
    GROUP BY District
    ORDER BY `Average Population`;

    結果:

    +-----------------+--------------------+
    | District        | Average Population |
    +-----------------+--------------------+
    | Tasmania        |             126118 |
    | Capital Region  |             322723 |
    | Queensland      |             451309 |
    | South Australia |             978100 |
    | New South Wales |             998487 |
    | West Australia  |            1096829 |
    | Victoria        |            1495356 |
    +-----------------+--------------------+

    マルチワードエイリアス(`Average Population`など)で注文する場合は注意してください )、バッククォート文字(`)を使用する必要があります )アポストロフィの代わりに(' )2つの単語を囲みます。

    平均文字長を見つける

    AVG() 関数は、数値データを含む列だけに限定されません。 AVG()を組み合わせることもできます 他の領域の平均を見つけるために他の関数を使用します。

    たとえば、サンプルデータを使用すると、City内のすべての値の平均文字長を見つけることができます。 列:

    SELECT ROUND(AVG(CHAR_LENGTH(Name))) AS 'Average Character Length'
    FROM city
    WHERE CountryCode = 'AUS'
    AND District = 'New South Wales';

    結果:

    +--------------------------+
    | Average Character Length |
    +--------------------------+
    |                       10 |
    +--------------------------+

    OVER句の使用

    前述のように、構文ではOVERが可能です。 クエリに含まれる句。これは少し複雑になる可能性がありますが、基本的にはOVER 句を使用すると、ウィンドウ関数で処理するためにクエリ行をグループに分割する方法を指定できます。

    次に例を示します:

    SELECT 
        District,
        Name AS City,
        Population,
        ROUND(AVG(Population) OVER(PARTITION BY District)) AS 'District Avg'
    FROM City
    WHERE CountryCode = 'AUS'
    ORDER BY District;
    

    結果:

    +-----------------+---------------+------------+--------------+
    | District        | City          | Population | District Avg |
    +-----------------+---------------+------------+--------------+
    | Capital Region  | Canberra      |     322723 |       322723 |
    | New South Wales | Sydney        |    3276207 |       998487 |
    | New South Wales | Wollongong    |     219761 |       998487 |
    | New South Wales | Newcastle     |     270324 |       998487 |
    | New South Wales | Central Coast |     227657 |       998487 |
    | Queensland      | Townsville    |     109914 |       451309 |
    | Queensland      | Brisbane      |    1291117 |       451309 |
    | Queensland      | Cairns        |      92273 |       451309 |
    | Queensland      | Gold Coast    |     311932 |       451309 |
    | South Australia | Adelaide      |     978100 |       978100 |
    | Tasmania        | Hobart        |     126118 |       126118 |
    | Victoria        | Melbourne     |    2865329 |      1495356 |
    | Victoria        | Geelong       |     125382 |      1495356 |
    | West Australia  | Perth         |    1096829 |      1096829 |
    +-----------------+---------------+------------+--------------+

    この例では、行をDistrictで分割します 、各パーティション(地区)の平均を提供します。これにより、都市の人口などのより詳細なデータと、それが属する地区の平均人口を確認できます。


    1. いつカーソルとデータベースを閉じる必要がありますか?

    2. phpMyBackupPro –Linux用のWebベースのMySQLバックアップツール

    3. MariaDBでのGREATEST()のしくみ

    4. MySQL PI()関数–π(pi)の値を返します