天天看點

sql 某列資料全部為0則不顯示該列_資料産品經理養成記(五):彙總分析1.什麼是彙總函數?2.資料分組函數3.對分組結果指定條件4.對查詢結果排序

學會了如何查找資料後,接下來就要對資料進行分析處理,比如求和、平均值、加總等等。這些對資料的加工處理通過彙總函數來實作。彙總函數在之前的兩篇文章中都有涉及,這裡采用概念--案例--總結的方式,集中介紹一下。

sql 某列資料全部為0則不顯示該列_資料産品經理養成記(五):彙總分析1.什麼是彙總函數?2.資料分組函數3.對分組結果指定條件4.對查詢結果排序

1.什麼是彙總函數?

函數是SQL裡的關鍵字,是一種運算指令。

通常來說,函數與字段名稱或表達式聯合使用,處理輸入的資料并産生結果。SQL包含多種類型函數,其中彙總函數為SQL提供合計資訊,比如計數、總和、平均等。

常見的彙總函數有以下幾種:

  1. count:求某一列的行數
  2. sum:對某列資料求和
  3. avg:求某列資料的平均值
  4. max:求某列資料的最大值
  5. min:求某列資料的最小值

注意:

1. 如果彙總函數後面有null(空值),那麼都會把空值排除在外進行計算。

2.如果要計算所有的行(包括空值的行),一般用星号表示,例子如下:

select 姓名,count(*)

from student;

3.sum、avg函數,隻能對數值類型的列進行計算,否則會報錯。

count、max、min函數,可以對任何類型計算。

舉個例子說明一下,這裡有一張名為“student”的表,表裡面的有一些學生和課程相關的資訊,如下:

sql 某列資料全部為0則不顯示該列_資料産品經理養成記(五):彙總分析1.什麼是彙總函數?2.資料分組函數3.對分組結果指定條件4.對查詢結果排序

1.你想計算姓名這一列都多少行,需要使用‘count’函數,寫法如下:

select count(姓名)from student;
           

2.計算成績這一列總和,寫法如下:

select sum(成績)from student;
           

3.計算成績這一列平均值,寫法如下:

select avg(成績)from student;
           

4.計算成績這一列的最大值、最小值,寫法如下:

select max(成績),min(成績)from student;
           

可以發現彙總函數的寫法基本相似。通常來說,彙總函數是一種比較簡單的函數,不會單獨使用,一般都要結合其他函數(group by等)才能更好的達到分析效果。

sql 某列資料全部為0則不顯示該列_資料産品經理養成記(五):彙總分析1.什麼是彙總函數?2.資料分組函數3.對分組結果指定條件4.對查詢結果排序

2.資料分組函數

彙總函數是按照某一列對資料進行計算,比如計算【姓名】列的總數量,現在如果要看的細一點,分别計算男生、女生的總人數,怎麼實作呢?這裡就需要用到分組函數,看下面這張表:

sql 某列資料全部為0則不顯示該列_資料産品經理養成記(五):彙總分析1.什麼是彙總函數?2.資料分組函數3.對分組結果指定條件4.對查詢結果排序

上表一共有三行資料,通過分組函數(‘group by’)來實作分組統計。‘group by’函數一般和彙總函數一起使用。對應的寫法如下:

select 性别,count(*)from studentgroup by 性别;
           

注意:

1.上面語句的運作順序是:第二行--第三行--第一行,也就是先選擇表,再按照條件對資料分總,最後計總顯示出來。

再舉一個例子:

sql 某列資料全部為0則不顯示該列_資料産品經理養成記(五):彙總分析1.什麼是彙總函數?2.資料分組函數3.對分組結果指定條件4.對查詢結果排序

你想統計出生日期大于‘1990-01-02’的男生總數、女生總數,該如何寫SQL語句?先寫出分析思路:

  1. 篩選出出生日期大于‘1990-01-02’的資料:where 出生日期 > 1990-01-02’
  2. 将資料按照性别分組:group by 性别
  3. 分别計算每一組的人數:count 性别

把上面的分析思路整理成SQL語句,如下:

select 性别,count(*) as 學生人數from student where 出生日期 > 1990-01-02’group by 性别;
           

以上語句運作的結果如下:

sql 某列資料全部為0則不顯示該列_資料産品經理養成記(五):彙總分析1.什麼是彙總函數?2.資料分組函數3.對分組結果指定條件4.對查詢結果排序

3.對分組結果指定條件

上個栗子,你統計出了出生日期大于‘1990-01-02’的男生總數、女生總數後,隻想顯示男生的資料,該如何寫語句呢?可以使用‘having’語句對分組結果,指定條件,寫法如下:

select 性别,count(*) as 學生人數from student where 出生日期 > 1990-01-02’group by 性别having 性别 = 男;
           

注意:

這裡為什麼不用‘where’子句來指定條件?因為where隻能指定行的原始資料。

‘having’,用于對分組以後資料,指定條件。

4.對查詢結果排序

統計出資料後,為了友善觀察,通常需要對資料進行排序,簡單的排序有兩種,升序、降序。我們在excel中都使用過類似的功能,那麼在SQL中如何實作?

sql 某列資料全部為0則不顯示該列_資料産品經理養成記(五):彙總分析1.什麼是彙總函數?2.資料分組函數3.對分組結果指定條件4.對查詢結果排序

在SQL通過‘order by’函數來實作,一般有兩種排序,降序(desc):從大到小,升序(asc):從小到大。

舉個例子:

現在有一張成績表‘score’,如下。現在你想計算出平均成績大于80分的課程,并由高到低排列,該如何寫函數?

sql 某列資料全部為0則不顯示該列_資料産品經理養成記(五):彙總分析1.什麼是彙總函數?2.資料分組函數3.對分組結果指定條件4.對查詢結果排序

我們先寫出分析思路,如下:

  1. 對成績按照課程号分組:group by 課程号
  2. 求課程的平均值:avg (成績) as 平均成績
  3. 平均成績大于80分: having 平均成績 >80
  4. 由高到低排列(降序):order by 平均成績 desc

把上面的分析思路整理成SQL語句,如下:

select 課程号,avg(成績) as 平均成績from scoregroup by 課程号having avg(成績) > 80oorder by 平均成績 desc;
           

注意:

使用‘order by’語句的時候,如果查詢的列包含空值,空值會在查詢結果的開頭展示。如果資料庫有大量資料,你隻想傳回一部分資料的時候,該怎麼辦?可以使用limit,從查詢結果中,展示指定行的資料。寫法如下:

select *from scorelimit 2;
           

意思就是隻取前兩行資料。

彙總分析就到這裡了,關于SQL的内容還有最後一節:複雜查詢,講完了會分享一案例和資料分析的基本思路。其實SQL學習來并不很很難,它就是一門工具,你使用的越多就會越熟練。要多多練習!

歡迎持續關注,公号:資料産品經理之路。

繼續閱讀