Last Updated on 2021-05-14 by Clay
今天主要紀錄的為 SQL 當中數值的一些常用指令:
- AVG()
- COUNT()
- MAX()
- MIN()
- SUM()
AVG
AVG 為求數值『平均』的函式,我們同樣以 MySQL 內自帶的 "world" 來示範。
select Name, SurfaceArea from country;
Output:
Name | SurfaceArea |
Aruba | 193.00 |
Afghanistan | 652090.00 |
Angola | 1246700.00 |
Anguilla | 96.00 |
Albania | 28748.00 |
Andorra | 468.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 這個欄位的最小值了。