溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么掌握SQL聚合、分組和排序

發布時間:2021-11-10 16:27:03 來源:億速云 閱讀:259 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么掌握SQL聚合、分組和排序”,在日常操作中,相信很多人在怎么掌握SQL聚合、分組和排序問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么掌握SQL聚合、分組和排序”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、聚合查詢

在訪問數據庫時,經常要對表中的某列數據進行統計匯總,如求和、最大值、最小值、平均值等,這時就需要使用聚合函數,所謂聚合函數,就是用于匯總的函數,聚合就是將多行匯總為一行,

常見的聚合函數如下:

1、COUNT 函數

count函數用于統計表中記錄行數。

例如,計算全部數據的行數:

SELECT COUNT(*) FROM users;

注意: COUNT(*)會得到包含空值NULL的數據行數,若想排除包含NULL的數據行,可以使用count(字段名),會得到NULL之外的數據行數。

SELECT COUNT(user_name) FROM users;

2、SUM 函數

用于計算任意列中數據的和。

例如,計算所有用戶的年齡之和:

SELECT sum(age) FROM users;

3、AVG 函數

用于計算任意列中數據的平均值。

例如,計算所有用戶的年齡平均值:

SELECT AVG(age) FROM users;

4、MAX 函數和 MIN 函數

MAX函數用于計算任意列中數據的最大值,MIN函數用于計算任意列中數據的最小值。

例如,計算所有用戶中的年齡的最大值和最小值:

SELECT MAX(age),MIN(age) FROM users;

注意: MAX函數和MIN函數幾乎適用于所有數據類型的列,SUM函數和AVG函數只適用于數值類型的列。

二、分組查詢

聚合函數是對表中所有數據進行統計匯總,還可以使用GROUP BY子句先把數據分成若干組,再進行統計匯總。

語法格式:

SELECT <字段名>,... FROM <表名> GROUP BY <字段名>,...;

例如,按照用戶所在城市進行分組統計每個城市用戶的和:

SELECT city,count(*) FROM users GROUP BY city;
+-------+----------+
| city  | count(*) |
+-------+----------+
| 北京  |       60 |
| 上海  |       45 |
| NULL  |       80 |
| 濟南  |       12 |
+-------+----------+

通過結果可以看出,字段為NULL的也會被列為一個分組。如果想要排除在外,可以使用WHERE子句。

SELECT city,count(*) FROM users WHERE city IS NOT NULL GROUP BY city;

三、對聚合結果進行過濾

當我們使用GROUP BY子句分組的時候,有時候就需要對分組的聚合結果進行過濾,我們可能首先會想到使用WHERE子句,其實并不是,而是用HAVING子句,HAVING的作用和WHERE一樣,都是起到過濾的作用,只不過WHERE是用于數據行的過濾,而HAVING則用于分組聚合結果的過濾。

例如,按照用戶的所在城市進行分組,并且篩選分組中用戶數量大于40的組:

SELECT city,COUNT(*) AS num FROM users GROUP BY city HAVING num>40;

再比如:按照用戶的所在城市進行分組,并且篩選分組中用戶平均年齡小于25的組。

SELECT city,AVG(age) AS avg_age FROM users GROUP BY city HAVING avg_age<25;

1、HAVING 子句的構成要素

HAVING子句中能夠使用的3種要素:

  • 常數

  • 聚合函數

  • GROUP BY子句中指定的列名(即聚合鍵)

四、對查詢結果進行排序

SQL查詢中可以用到排序,對數據進行升序(ASC)或降序排列(DESC),默認是升序。

語法格式:

SELECT <字段名>,... FROM <表名> ORDER BY <字段名> ASC/DESC,...;

例如:對users表中的記錄按照年齡升序排列:

SELECT * FROM users ORDER BY age ASC;

注意: 升序ASC可以省去不寫,但是降序DESC必須要寫。

例如,對users表中的記錄按照年齡降序排列:

SELECT * FROM users ORDER BY age DESC;

1、 指定多個排序鍵

ORDER BY子句中可以指定多個排序鍵,例如,對users表中的記錄按照年齡降序、注冊時間升序排列:

SELECT * FROM student ORDER BY age DESC,register_time ASC;

多個字段排序時中間用“,”隔開。

2、 使用聚合函數排序

 ORDER BY子句中還可以使用聚合函數的結果進行排序。

例如,按照用戶的所在城市進行分組,并且按照分組的用戶數量進行排序:

SELECT city,COUNT(*) AS num FROM users GROUP BY city ORDER BY num;

到此,關于“怎么掌握SQL聚合、分組和排序”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女