想像一下... 你手上有一大串超市的購物清單。你想知道最後到底花了多少錢。你總不會自己一個一個加吧?但店家早就把這些都存進資料庫了,所以你拿到的發票金額一定是對的。很有可能,在他們的 app 裡,今天的主角——SUM() 函數就在幫忙!這是一個聚合函數,可以把數字型態欄位的值全部加起來。
SUM() 的語法
SUM() 這個函數看起來就跟它的名字一樣簡單,不過我們還是來拆解一下:
SELECT SUM(欄位)
FROM 資料表;
這個函數會把指定欄位裡的所有值加總起來。但說真的:這裡不會有什麼神奇的文字或日期加法!只能加數字啦。
SUM() 的使用範例
我們先從簡單的例子開始。假設有個 salaries 資料表,裡面存著員工的薪水:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | 55000 |
| 4 | 75000 |
範例 1:加總所有薪水
你想知道公司總共要發多少薪水。這樣做就對了:
SELECT SUM(salary) AS total_salary
FROM salaries;
結果:
| total_salary |
|---|
| 240000 |
這裡發生了什麼? PostgreSQL 把 salary 欄位的所有值 (50000 + 60000 + 55000 + 75000) 加起來,然後用 total_salary 這個新欄位名稱回傳結果。
範例 2:有條件的加總
假設你只想知道薪水超過 55,000 的員工總薪資。這時就要用我們最愛的 WHERE:
SELECT SUM(salary) AS high_salary_total
FROM salaries
WHERE salary > 55000;
結果:
| high_salary_total |
|---|
| 135000 |
這裡發生什麼? PostgreSQL 先用 WHERE salary > 55000 過濾,只留下薪水 60000 跟 75000 的那兩筆,然後把這兩個加起來 (60000 + 75000)。
3. SUM() 的一些小細節
NULL 會怎麼影響 SUM()?就像我們看到的,NULL 就是「什麼都沒有」,SUM() 算的時候會直接跳過它。來看個例子:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | NULL |
| 4 | 75000 |
如果我們想知道總薪資:
SELECT SUM(salary) AS total_salary
FROM salaries;
結果:
| total_salary |
|---|
| 185000 |
為什麼是「185000」不是「NULL」? PostgreSQL 算總和的時候,NULL 直接被無視啦。
進階 SUM() 查詢範例
範例 1:加總跟過濾一起來
想像有個 sales 資料表,存著銷售資料。它長這樣:
| product_id | amount |
|---|---|
| 1 | 150 |
| 2 | 200 |
| 3 | NULL |
| 1 | 100 |
你想知道 product_id = 1 這個產品的總銷售額 amount:
SELECT SUM(amount) AS total_sales
FROM sales
WHERE product_id = 1;
結果:
| total_sales |
|---|
| 150 |
範例 2:加總再做額外運算
再回到 salaries 資料表。你想知道總薪資比 200,000 多多少:
SELECT SUM(salary) - 200000 AS surplus
FROM salaries;
結果:
| surplus |
|---|
| 40000 |
用 SUM() 常見的錯誤
對非數字資料用 SUM():如果你不小心拿來加文字,會直接報錯。記得檢查欄位的資料型態喔。
忽略 NULL:新手常常忘記 NULL 不會被算進去,結果算出來的數字怪怪的。
GO TO FULL VERSION