上次我們已經學會要怎麼從資料庫依照各個表取出我們想要的欄位,也可以透過條件篩選的方式過濾我們想要的資料。接下來,讓我們更進一步來透過SQL語法整理我們想要的資料樣貌。
如果我們想要將資料透過分組的形式呈現該怎麼辦呢?
SELECT AVG(欄位名),COUNT(欄位名),SUM(欄位名),欄位名
FROM 表名
GROUP BY 欄位名;
沒錯!要使用到GROUP BY
,這個有點像是Excel裡的樞紐分析表,可以透過選擇自己想要的欄位,將數值做各種運算(加總、平均、計數等)來呈現。
而當我們使用了GROUP BY
後,又想要根據該表篩選對應的條件該怎麼辦呢?此時或許你會說可以使用上次我們已經學過的WHERE
。可惜!差一點點,在使用GROUP BY
後並不能使用WHERE
,針對分組過後的篩選這時我們要用到另外一個指令HAVING
!
SELECT AVG(欄位名1),COUNT(欄位名2),SUM(欄位名3),欄位名4
FROM 表名
GROUP BY 欄位名4
HAVING 條件;
HAVING
和WHERE
還有一個差別就是,聚合函數(類似於AVG、SUM等)並不能放在WHERE
的條件哩,但卻可以在HAVING
的條件裡使用!
呼~~已經篩好想要的資料表,那針對這些資料如果想要做排序該怎麼辦?
SELECT AVG(欄位名1),COUNT(欄位名2),SUM(欄位名3),欄位名4
FROM 表名
GROUP BY 欄位名4
HAVING 條件
ORDER BY 欄位名4;
在ORDER BY
的預設中是採升序排列(由小到大)語法為ASC
,如果想要降序排列(由大到小)的話,則要再加上DESC
。
SELECT AVG(欄位名1),COUNT(欄位名2),SUM(欄位名3),欄位名4
FROM 表名
GROUP BY 欄位名4
HAVING 條件
ORDER BY 欄位名4 DESC;
上述是本篇的內容,有很多函數和語法這裡沒有提及,因此這邊推薦給大家一個超棒的學習資源-SQLbolt!
學習SQL常常遇到的第一步是要去哪裡找資料庫,要怎麼安裝My SQL等等問題,但是透過這個線上教學平台,以上問題迎刃而解!透過章節安排,一步一步練習基礎需要學習的語法,非常推薦新手的各位在上面學習,快的話一天就可以全部練習完囉!
推薦學習資源:
萬用百科:
https://www.1keydata.com/tw/sql/sql.html
https://www.w3school.com.cn/sql/index.asp