SQL中的聚合函數運用


參考網址: https://zhuanlan.zhihu.com/p/245115561

聚合函數是什么

聚合函數是對一組值執行計算,並返回單個值的函數。常與 SELECT 語句的 GROUP BY 子句一同使用。

常見聚合函數有哪些

  1. count():計數,count(列名)不計算空值,count()計入空值
  2. sum():對一列數據求和,必須為數字
  3. avg():對一列數據求均值。值為null時,計算平均值時會忽略帶有null值的那一行
  4. min():最小值
  5. max():最大值

聚合函數應用的注意事項

  1. where子句后不能跟聚合函數
  2. having后可用聚合函數進行篩選
  3. 執行的優先順序為:where > group by > having > order by
  4. 運用group by之后,select中返回的字段只能出現聚合字段(或與之對應的唯一值)和聚合函數。舉個栗子:有學號、性別、年齡3個字段,如果group by性別,則只能返回性別及其相關聚合函數,如果返回年齡或者學號,則只會返回1行,往往和實際需求不符

聚合函數練習題

拿到SQL題目后,解題可分為3步(根據難易程度可進行省略):

  • 翻譯成大白話
  • 寫出分析思路
  • 寫出對應的sql子句
world 表格

1、計算世界總人口

分析思路:“總人口”是所有人口相加,用sum函數

SELECT SUM(population)
FROM world

2、列出所有的洲名, 每個只有一次

大白話:表中洲去重后的名稱列出來

分析思路:用distinct

SELECT DISTINCT continent
FROM world

3、找出非洲(Africa)的GDP總和

分析思路:先找出非洲(where),再求和GDP(sum)

SELECT SUM(gdp)
FROM world
WHERE continent = 'Africa'

4、有多少個國家面積大於一百萬

分析思路:先篩選出面積大於一百萬的國家(where),再對這些國家進行計數(count)

SELECT count(name)
FROM world
WHERE area > 1000000

5、“法國”,“德國”,“西班牙”的總人口是多少?

分析思路:先篩選出法國”,“德國”,“西班牙”(where),再對這些國家人口進行求和(sum)

SELECT sum(population)
FROM world
WHERE name in ('France','Germany','Spain')

6、對每一個洲,展示洲份和國家的數量

分析思路:對洲進行分組(group by),然后對每組國家數量進行計數(count)

SELECT continent, count(name)
FROM world
GROUP BY continent

7、對每一個洲,展示洲份和至少有1000萬人口國家的數目

分析思路:先篩選出有1000萬人口的國家(where),然后對洲進行分組(group by),最后給出計數結果(count)

SELECT continent, count(name)
FROM world
WHERE population >= 10000000
GROUP BY continent

注意:這里篩選1000萬人口不能用having來完成,因為人口不是分組字段(continent才是),這是我最開始刷題時常常混淆的地方(指where和having)

8、列出有至少1億人口的洲

分析思路:先對洲進行分組(group by),然后計算每個洲的人口總和(sum),最后篩選出有1億人口的洲(having)

SELECT continent
FROM world
GROUP BY continent
HAVING SUM(population) >= 100000000

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM