CodeGym /課程 /SQL SELF /聚合函式入門

聚合函式入門

SQL SELF
等級 7 , 課堂 0
開放

聚合函式... 這些傢伙在資料分析界根本就是魔法師啦!它們能把幾百萬行的資料變成精簡又一目了然的結果。有了它們,我們可以計算、找最小最大值、算平均,還能做一堆其他操作。現在就讓我們一步步來搞懂吧。

聚合函式 —— 這是 SQL 裡專門針對一群資料列做運算,然後回傳一個單一結果的特殊函式。打個比方,就像你把你早上喝咖啡的所有統計數據都收集起來,比如:你一週喝了幾杯、加沒加糖、連續幾天加了奶精之類的。

聚合函式能解決的問題舉例:

  • 計算資料表裡的總筆數。
  • 找出數值欄位的最小值或最大值。
  • 加總某個欄位的所有值。
  • 計算欄位的平均值。
  • 挑出唯一值。

這些東西「底層」怎麼運作?

SQL 會在 SELECT 查詢資料後才執行聚合函式。比如你寫 SUM()AVG(),SQL 會先把資料抓出來,然後只針對選中的資料列做運算。

PostgreSQL 裡的主要聚合函式

來點實戰,看看我們的 TOP5 英雄:

  1. COUNT() — 計算資料列數量。
  2. SUM() — 加總數值欄位。
  3. AVG() — 算平均值。
  4. MIN() — 找最小值。
  5. MAX() — 找最大值。

聚合函式的使用範例

  1. COUNT() 計算資料列

COUNT() 這個函式可以算出資料表的總筆數,或是某個欄位裡非空值的數量。

舉例:假設我們有一個 students 資料表,裡面存著學生的資訊:

id name age grade
1 Otto Art 20 85
2 Maria Chi 22 90
3 Alex Lin 21 78
4 Anna Song 23 NULL

來算算總共有幾個學生:

SELECT 
    COUNT(*) AS total_students
FROM students;

結果:

total_students
4

現在來算有填 grade 的學生數:

SELECT 
    COUNT(grade) AS students_with_grades
FROM students;

結果:

students_with_grades
3

為什麼會這樣?因為 COUNT(column) 會忽略 NULL 值。

  1. SUM() 加總

SUM() 這個函式就是用來把數值欄位的所有值加起來。

舉例:來看看我們學生總共拿了多少分。

SELECT 
    SUM(grade) AS total_grades
FROM students;

結果:

total_grades
253

注意:如果欄位裡有 NULL,加總時會直接忽略掉。

  1. AVG() 算平均值

AVG() 這個函式會把欄位裡所有數值算平均。

舉例:來算學生的平均分數。

SELECT 
    AVG(grade) AS average_grade
FROM students;

結果:

average_grade
84.33

你應該有發現,NULL 也一樣會被忽略。

  1. MIN()MAX() 找最小最大值

有時候我們要找最小或最大的值,這時就用 MIN()MAX()

舉例:找出年紀最小和最大的學生。

SELECT 
    MIN(age) AS youngest_student, 
    MAX(age) AS oldest_student
FROM students;

結果:

youngest_student oldest_student
20 23

這些函式我們之後還會再深入聊,敬請期待!

NULL 初體驗

關於 NULL 之後會有專門一堂課,不過先簡單說一下,NULL 就是沒有值。啥都沒有,空空的,真的就是個「無」啦!

假設我們有一個 students 資料表,裡面存著學生的資訊:

id name age grade hobbie
1 Otto Art 20 85
2 Maria Chi 22 90 跳舞
3 Alex Lin 21 78
4 Anna Song 23

名字和年齡一定有,但分數和興趣可能會沒有。如果資料表的某格完全沒填東西,就會說它 包含 NULL。NULL 不是數字也不是字串,它是一個特殊的代碼,代表啥都沒有。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION