Skip to content

[MySQL] 心得筆記(2) AVG, COUNT, MAX, MIN, SUM

今天主要紀錄的為 SQL 當中數值的一些常用指令:

  • AVG()
  • COUNT()
  • MAX()
  • MIN()
  • SUM()

AVG

AVG 為求數值『平均』的函式,我們同樣以 MySQL 內自帶的 “world” 來示範。

select
    Name, SurfaceArea
    from country;



Output:

NameSurfaceArea
Aruba193.00
Afghanistan652090.00
Angola1246700.00
Anguilla96.00
Albania28748.00
Andorra468.00

以下省略。我們可以可以透過資料庫看到國家的『名稱』以及『國土面積』。

這時候,我們就可以使用 AVG() 這個函式來求出所有國家國土面積的『平均值』。

select
    avg(SurfaceArea)
    from country;



Output:

avg(SurfaceArea)
623248.146025

COUNT

count 其實在之前紀錄的心得裡面就有使用過,最直觀的理解便是:『計算在查找的欄位共有多少筆資料』。

比如我們計算 city 這個 table 裡面共有幾筆資料(不分欄位):

select
    count(*)
    from city;



Output:

count(*)
4079

我們可以簡單地看到共有 4079 筆資料。

另外,COUNT() 函式也常跟 DISTINCT() 這個函式放在一塊兒。DISTINCT() 能把重複的資料排除,只計算不重複的資料。

比如說我們剛才看到資料總共有 4079 筆,那現在我們計算 city 當中共有多少種種類的 CountryCode:

select
    count(distinct(CountryCode))
    from city;


Output:

count(distinct(CountryCode))
232

是不是看到數字瞬間變小許多了呢?這是因為 DISTINCT() 函式不會計算重複的值。


SUM

我覺得 SUM 得跟 COUNT 放在一起講,我當初剛寫的時候很常把這兩個指令搞混:

  • SUM() 是全部資料的『值』加總
  • COUNT() 是計算查找欄位總共有多少『筆』資料

我們來做個簡單的實驗: sum(SurfaceArea)/count(SurfaceArea) 應該會等於 avg(SurfaceArea)

select
    avg(SurfaceArea), sum(SurfaceArea)/count(SurfaceArea)
    from country;



Output:

avg(SurfaceArea)sum(SurfaceArea)/count(SurfaceArea)
623248.146025 623248.146025

是一樣的。故 SUM() 確實可以理解為將所有查詢欄位的數值加總。


MAX

MAX() 函式就相當單純了:就是於查找欄位當中找到最大的數值。

比如說我們同樣使用 SurfaceArea 這個欄位,我們可以這樣找尋最大值:

select
    max(SurfaceArea)
    from country;



Output:

max(SurfaceArea)
17075400.00

MIN

MIN() 幾乎跟 MAX() 一樣單純 —— 就只是簡單地將查找欄位當中找出其中的最小值。

select
    min(SurfaceArea)
    from country;



Output:

min(SurfaceArea)
0.40

這樣一來就找出 SurfaceArea 這個欄位的最小值了。

Leave a Reply