iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
Software Development

SQL 30天手把手入門系列 第 19

Day 19 - 利用內建函數來彙整資料

經由先前幾天不斷的修改 Product 資料表後,目前的狀態如下:

id name category cost_price sell_price purchase_date info
0001 apple fruit 30 40 2020-09-01
0002 television electronic device 6000 8000 2020-08-07
0003 banana fruit 20 30 2020-09-05
0004 laptop electronic device 12000 18000 2020-09-01
0005 grape fruit 50 80 2020-08-15
0006 earphones electronic device 10000 12000 2020-09-01
0007 strawberry fruit 45 70 2020-09-08
0008 cell phone electronic device 3000 3300 2020-09-06
0009 watermelon fruit 100 160 2020-09-25 NOT NULL
0010 testPhone electronic device

P.S 有一些操作,為避免和該天主題不相關而有所省略。因此有缺的欄位,請自行補上。

就如同 Microsoft Office 辦公室軟體裡的 Excel 一般,SQL 本身是有一些內建函數來統整資料的。這邊介紹實務上很常用的統計「個數、總和、平均、最大值 / 最小值、排除重複」這五個函數。

  1. COUNT:記錄符合的資料筆數
/*統計全部資料筆數*/
SELECT COUNT(*) FROM Product; 
/*統計 info 欄位不是 NULL 的筆數。當有指定欄位,則 NULL 不會被計入*/
SELECT COUNT(info) FROM Product;

Day19Result1

  1. SUM:指定欄位求總和,若有 NULL 會自動排除,不會讓結果出現 NULL
SELECT SUM(sell_price) FROM Product; /*answer: 41680*/

Day19Result2

  1. AVG:指定欄位求平均值,不過要注意的是,由於 NULL 會自動排除不會計算,導致個數可能會出現和預期不一樣的結果
  • 可搭配 ROUND() 一同使用
/*以下的計算個數為 9*/
SELECT AVG(sell_price) FROM Product; /*4631.1111*/
/*以下的計算個數為 9,且結果四捨五入到小數點後第二位*/
SELECT ROUND(AVG(sell_price),2) FROM Product; /*4631.11*/
/*若你想把 NULL 當成 0 來計算平均*/
SELECT AVG(COALESCE(sell_price,0)) FROM Product; /*4168.0000*/

Day19Result3

  1. MAX / MIN:求出指定欄位的最大值和最小值
SELECT MAX(cost_price), MIN(sell_price) FROM Product;

Day19Result4

  1. DISTINCT:排除重複,放在要排除的欄位名稱之前
/*想要統計一共有幾種分類*/
SELECT COUNT(DISTINCT category) FROM Product;

Day19Result5


上一篇
Day18 - 邏輯運算子
下一篇
Day 20 - 資料分群
系列文
SQL 30天手把手入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言