共計 2325 個字符,預計需要花費 6 分鐘才能閱讀完成。
本篇內容介紹了“mysql 如何分組求和”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在 mysql 中,可以利用 SELECT 語句配合 SUM() 函數和“GROUP BY”來分組求和,語法為“SELECT 查詢字段 SUM( 求和字段) AS 字段 FROM 表名 WHERE 條件 GROUP BY 分組字段一, 分組字段二;”。
本教程操作環境:windows10 系統、mysql8.0.22 版本、Dell G3 電腦。
mysql 怎么分組求和
在 mysql 中,可以利用
SELECT 查詢字段 SUM(求和字段) AS 字段 FROM 表名 WHERE 條件 GROUP BY 分組字段一, 分組字段二;
來進行分組求和。
示例如下:
1)count() 求某列的行數
很容易理解,count(列名) 就是求某列的行數,值得注意的一點是該列不會計算空值的行數。舉例:
— 查詢共有幾名教師
— 查詢教師表共有多少行
SELECT COUNT(*) FROM teacher;
如果列中有重復值,我們計數不想計算重復值,怎么辦呢?我們可以使用 distinct 來解決:
-- 查詢成績表里共有幾個學生的成績
SELECT COUNT(DISTINCT 學號) FROM score;
2)sum() 對某列數據求和
求和,就是對某一列的數值進行求和,只能對數值進行計算。舉例:
-- 對所有成績求和
SELECT SUM(成績) FROM score;
3)avg() 對某列數值求平均值
同樣,平均值的計算只能對數值進行計算:
-- 對所有成績求平均值
SELECT AVG(成績) FROM score;
4)max() 求某列數據的最大值、min() 求某列數據的最小值
-- 獲取所有成績中的最大成績
SELECT MAX(成績),MIN(成績) FROM score;
分組
問題中,我們提到,需要知道每科成績的平均成績,那么我們就需要進行分組。
SQL 中,group by 語句可以根據一列或者多列對結果集進行分組。舉例:
-- 計算每一科課程的平均成績
SELECT 課程號,AVG(成績) FROM score GROUP BY 課程號;
在上篇文章中,我們就有簡單的介紹 SQL 語句執行順序:先執行 from 從哪個表獲取數據,再執行 select 語句;
這里我們從成績表獲取數據,使用 group by 語句將數據按某種規則進行分組;然后在分組的結果上進行計算 count();最后 select 組合結果,把上一步的每一組計算結果總結到一個表中。
對分組條件指定條件
在一開始的問題里,要求“計算各科的平均成績并且得出平均成績大于等于 80 分”,以上兩節我們得到了計算每天一科的平均成績,現在對平均成績指定條件:“大于等于 80 分”,我們使用 having 子句。
having 子句與 where 子句都是有條件的選取數據,不同的是 where 不能與匯總函數一起使用。
-- 計算平均成績大于等于 80 分的課程;
SELECT 課程號,AVG(成績) FROM score GROUP BY 課程號 HAVING AVG(成績)
那是不是說,having 子句的順序也是在 select 結果匯總的前邊呢?是的,having 子句是對 group by 的分組結果指定條件,比如要求大于等于 80 分,篩選出結果后,在進行結果匯總。
-- 對教師表根據教師姓名排序
SELECT * FROM teacher ORDER BY 教師姓名;

我們發現,空值 Null 排在了最前面,所以:含有空值的列在排序時候,空值 null 會在開頭,當數據量很大想看空值的情況,就可以用這個排序。
另外,在補充一個 limit 語句,從查詢結果中取出指定行,比如,我們如果從剛才的查詢結果中只取第一行:
-- 計算平均成績大于等于 80 分的課程并根據成績降序排, 并獲取第一行
SELECT 課程號,AVG(成績) FROM score GROUP BY 課程號 HAVING AVG(成績) =80 ORDER BY AVG(成績) DESC LIMIT 1;

接下來我們進行一個總結。
用 SQL 解決業務問題分析思路
簡單來說:明確問題,將問題翻譯成大白話,逐步進行拆解,并寫出分析思路和對應的 SQL 思路。
1)明確問題,將問題翻譯成大白話:
“計算各科的平均成績并且得出平均成績大于等于 80 分的課程并降序排列”翻譯成大白話就是:
“計算每一門課程的平均成績,然后根據得出的結果,進行大于等于 80 分的條件查詢,對查詢結果進行降序排列”。
2)逐步進行拆解,并寫出分析思路和對應的 SQL 思路:
① 對課程號進行分組,計算每一門課程的平均成績;
② 對①的結果指定條件“=80”;
③ 對②的結果進行降序排列;
我們可以把拆解后的思路套用到下方的公式中:
select 查詢結果
from 從那張表中查找數據
where 查詢條件(運算符、模糊查詢)group by 分組(每個)having 對分組結果指定條件
order by 對查詢結果排序
limit 從查詢結果中取出指定行;
試一下吧:
select 查詢結果 [課程號,avg( 成績)]
from 從那張表中查找數據 [成績表 score]
where 查詢條件(運算符、模糊查詢)[No]
group by 分組(每個)[課程號]
having 對分組結果指定條件 [avg( 成績)=80]
order by 對查詢結果排序 [avg( 成績)desc]
limit 從查詢結果中取出指定行;[No]
“mysql 如何分組求和”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!