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