mysql怎么分組求和

mysql中,可以利用select語句配合SUM()函數和“GROUP BY”來分組求和,語法為“SELECT 查詢字段 SUM(求和字段) AS 字段 FROM 表名 WHERE 條件 GROUP BY 分組字段一,分組字段二;”。

mysql怎么分組求和

本教程操作環境:windows10系統、mysql8.0.22版本、Dell G3電腦。

mysql怎么分組求和

在mysql中,可以利用

SELECT?查詢字段?SUM(求和字段)?AS?字段?FROM?表名?WHERE?條件?GROUP?BY?分組字段一,分組字段二;

來進行分組求和。

示例如下:

1)count() 求某列的行數

很容易理解,count(列名)就是求某列的行數,值得注意的一點是該列不會計算空值的行數。舉例:

>– 查詢共有幾名教師

mysql怎么分組求和

>– 查詢教師表共有多少行 SELECT COUNT(*) FROM teacher;

mysql怎么分組求和

如果列中有重復值,我們計數不想計算重復值,怎么辦呢?我們可以使用distinct來解決:

-- 查詢成績表里共有幾個學生的成績 SELECT COUNT(DISTINCT 學號) FROM score;

mysql怎么分組求和

2)sum() 對某列數據求和

求和,就是對某一列的數值進行求和,只能對數值進行計算。舉例:

--  對所有成績求和 SELECT SUM(成績) FROM score;

mysql怎么分組求和

3)avg() 對某列數值求平均值

同樣,平均值的計算只能對數值進行計算:

-- 對所有成績求平均值 SELECT AVG(成績) FROM score;

mysql怎么分組求和

4)max() 求某列數據的最大值、min() 求某列數據的最小值

-- 獲取所有成績中的最大成績 SELECT MAX(成績),MIN(成績) FROM score;

mysql怎么分組求和

分組

問題中,我們提到,需要知道每科成績的平均成績,那么我們就需要進行分組。

SQL中,group by語句可以根據一列或者多列對結果集進行分組。舉例:

mysql怎么分組求和

-- 計算每一科課程的平均成績 SELECT 課程號,AVG(成績) FROM score GROUP BY 課程號;

mysql怎么分組求和

在上篇文章中,我們就有簡單的介紹SQL語句執行順序:先執行from從哪個表獲取數據,再執行select語句;

這里我們從成績表獲取數據,使用group by語句將數據按某種規則進行分組;然后在分組的結果上進行計算count();最后select組合結果,把上一步的每一組計算結果總結到一個表中

對分組條件指定條件

在一開始的問題里,要求“計算各科的平均成績并且得出平均成績大于等于80分”,以上兩節我們得到了計算每天一科的平均成績,現在對平均成績指定條件:“大于等于80分”,我們使用having子句

mysql怎么分組求和

having子句與where子句都是有條件的選取數據,不同的是where不能與匯總函數一起使用。

-- 計算平均成績大于等于80分的課程; SELECT 課程號,AVG(成績) FROM score GROUP BY 課程號 HAVING AVG(成績)>=80;

那是不是說,having子句的順序也是在select結果匯總的前邊呢?是的,having子句是對group by 的分組結果指定條件,比如要求大于等于80分,篩選出結果后,在進行結果匯總。

mysql怎么分組求和

-- 對教師表根據教師姓名排序 SELECT * FROM teacher ORDER BY 教師姓名;

mysql怎么分組求和

我們發現,空值NULL排在了最前面,所以:含有空值的列在排序時候,空值null會在開頭,當數據量很大想看空值的情況,就可以用這個排序。

另外,在補充一個limit語句從查詢結果中取出指定行,比如,我們如果從剛才的查詢結果中只取第一行:

-- 計算平均成績大于等于80分的課程并根據成績降序排,并獲取第一行 SELECT 課程號,AVG(成績) FROM score GROUP BY 課程號 HAVING AVG(成績)>=80 ORDER BY AVG(成績) DESC LIMIT 1;

mysql怎么分組求和

接下來我們進行一個總結。

用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視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享