您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么掌握SQL聚合、分組和排序”,在日常操作中,相信很多人在怎么掌握SQL聚合、分組和排序問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么掌握SQL聚合、分組和排序”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
在訪問數(shù)據(jù)庫時(shí),經(jīng)常要對(duì)表中的某列數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總,如求和、最大值、最小值、平均值等,這時(shí)就需要使用聚合函數(shù),所謂聚合函數(shù),就是用于匯總的函數(shù),聚合就是將多行匯總為一行,
常見的聚合函數(shù)如下:
count
函數(shù)用于統(tǒng)計(jì)表中記錄行數(shù)。
例如,計(jì)算全部數(shù)據(jù)的行數(shù):
SELECT COUNT(*) FROM users;
注意: COUNT(*)會(huì)得到包含空值NULL的數(shù)據(jù)行數(shù),若想排除包含NULL的數(shù)據(jù)行,可以使用count(字段名),會(huì)得到NULL之外的數(shù)據(jù)行數(shù)。
SELECT COUNT(user_name) FROM users;
用于計(jì)算任意列中數(shù)據(jù)的和。
例如,計(jì)算所有用戶的年齡之和:
SELECT sum(age) FROM users;
用于計(jì)算任意列中數(shù)據(jù)的平均值。
例如,計(jì)算所有用戶的年齡平均值:
SELECT AVG(age) FROM users;
MAX
函數(shù)用于計(jì)算任意列中數(shù)據(jù)的最大值,MIN
函數(shù)用于計(jì)算任意列中數(shù)據(jù)的最小值。
例如,計(jì)算所有用戶中的年齡的最大值和最小值:
SELECT MAX(age),MIN(age) FROM users;
注意: MAX函數(shù)和MIN函數(shù)幾乎適用于所有數(shù)據(jù)類型的列,SUM函數(shù)和AVG函數(shù)只適用于數(shù)值類型的列。
聚合函數(shù)是對(duì)表中所有數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總,還可以使用GROUP BY
子句先把數(shù)據(jù)分成若干組,再進(jìn)行統(tǒng)計(jì)匯總。
語法格式:
SELECT <字段名>,... FROM <表名> GROUP BY <字段名>,...;
例如,按照用戶所在城市進(jìn)行分組統(tǒng)計(jì)每個(gè)城市用戶的和:
SELECT city,count(*) FROM users GROUP BY city; +-------+----------+ | city | count(*) | +-------+----------+ | 北京 | 60 | | 上海 | 45 | | NULL | 80 | | 濟(jì)南 | 12 | +-------+----------+
通過結(jié)果可以看出,字段為NULL
的也會(huì)被列為一個(gè)分組。如果想要排除在外,可以使用WHERE
子句。
SELECT city,count(*) FROM users WHERE city IS NOT NULL GROUP BY city;
當(dāng)我們使用GROUP BY
子句分組的時(shí)候,有時(shí)候就需要對(duì)分組的聚合結(jié)果進(jìn)行過濾,我們可能首先會(huì)想到使用WHERE
子句,其實(shí)并不是,而是用HAVING
子句,HAVING
的作用和WHERE
一樣,都是起到過濾的作用,只不過WHERE
是用于數(shù)據(jù)行的過濾,而HAVING
則用于分組聚合結(jié)果的過濾。
例如,按照用戶的所在城市進(jìn)行分組,并且篩選分組中用戶數(shù)量大于40的組:
SELECT city,COUNT(*) AS num FROM users GROUP BY city HAVING num>40;
再比如:按照用戶的所在城市進(jìn)行分組,并且篩選分組中用戶平均年齡小于25的組。
SELECT city,AVG(age) AS avg_age FROM users GROUP BY city HAVING avg_age<25;
HAVING子句中能夠使用的3種要素:
常數(shù)
聚合函數(shù)
GROUP BY
子句中指定的列名(即聚合鍵)
SQL
查詢中可以用到排序,對(duì)數(shù)據(jù)進(jìn)行升序(ASC
)或降序排列(DESC
),默認(rèn)是升序。
語法格式:
SELECT <字段名>,... FROM <表名> ORDER BY <字段名> ASC/DESC,...;
例如:對(duì)users表中的記錄按照年齡升序排列:
SELECT * FROM users ORDER BY age ASC;
注意: 升序ASC可以省去不寫,但是降序DESC必須要寫。
例如,對(duì)users表中的記錄按照年齡降序排列:
SELECT * FROM users ORDER BY age DESC;
ORDER BY
子句中可以指定多個(gè)排序鍵,例如,對(duì)users
表中的記錄按照年齡降序、注冊(cè)時(shí)間升序排列:
SELECT * FROM student ORDER BY age DESC,register_time ASC;
多個(gè)字段排序時(shí)中間用“,”隔開。
ORDER BY
子句中還可以使用聚合函數(shù)的結(jié)果進(jìn)行排序。
例如,按照用戶的所在城市進(jìn)行分組,并且按照分組的用戶數(shù)量進(jìn)行排序:
SELECT city,COUNT(*) AS num FROM users GROUP BY city ORDER BY num;
到此,關(guān)于“怎么掌握SQL聚合、分組和排序”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。