欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL 聚合、分組和排序

 更新時(shí)間:2021年11月10日 15:18:26   作者:tigeriaf  
這篇文章主要介紹了SQL 聚合、分組和排序,文章圍繞SQL 聚合、分組、排序的相關(guān)資料展開具體內(nèi)容,需要的朋友可以參考一下

一、聚合查詢

在訪問數(shù)據(jù)庫時(shí),經(jīng)常要對(duì)表中的某列數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總,如求和、最大值、最小值、平均值等,這時(shí)就需要使用聚合函數(shù),所謂聚合函數(shù),就是用于匯總的函數(shù),聚合就是將多行匯總為一行,

常見的聚合函數(shù)如下:

1、COUNT 函數(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;

2、SUM 函數(shù)

用于計(jì)算任意列中數(shù)據(jù)的和。

例如,計(jì)算所有用戶的年齡之和:

SELECT sum(age) FROM users;

3、AVG 函數(shù)

用于計(jì)算任意列中數(shù)據(jù)的平均值。

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

SELECT AVG(age) FROM users;

4、MAX 函數(shù)和 MIN 函數(shù)

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;

三、對(duì)聚合結(jié)果進(jìn)行過濾

當(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;

1、HAVING 子句的構(gòu)成要素

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

  • 常數(shù)
  • 聚合函數(shù)
  • GROUP BY子句中指定的列名(即聚合鍵)

四、對(duì)查詢結(jié)果進(jìn)行排序

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;

1、 指定多個(gè)排序鍵

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

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

多個(gè)字段排序時(shí)中間用“,”隔開。

2、 使用聚合函數(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 聚合、分組和排序的文章就介紹到這了,更多相關(guān)SQL 聚合、分組和排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL系列多表連接查詢92及99語法示例詳解教程

    MySQL系列多表連接查詢92及99語法示例詳解教程

    這篇文章主要為大家介紹了MySQL系列多表連接查詢92及99語法示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-10-10
  • MySQL null的一些易錯(cuò)點(diǎn)

    MySQL null的一些易錯(cuò)點(diǎn)

    這篇文章主要介紹了MySQL null的一些易錯(cuò)點(diǎn),幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-12-12
  • MySQL Router的安裝部署

    MySQL Router的安裝部署

    這篇文章主要介紹了MySQL Router的安裝部署,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-04-04
  • mysql關(guān)于or的索引的問題及解決

    mysql關(guān)于or的索引的問題及解決

    這篇文章主要介紹了mysql關(guān)于or的索引的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Mysql中關(guān)于Incorrect string value的解決方案

    Mysql中關(guān)于Incorrect string value的解決方案

    在對(duì)mysql數(shù)據(jù)庫中插入數(shù)據(jù)的時(shí)候,直接插入中文是沒有問題的!但是用預(yù)編譯語句時(shí),用流對(duì)數(shù)據(jù)進(jìn)行處理總報(bào)incorrect string value這個(gè)異常。本篇文章教給你解決方法
    2021-09-09
  • Mysql數(shù)據(jù)庫常用命令操作大全

    Mysql數(shù)據(jù)庫常用命令操作大全

    這篇文章主要介紹了Mysql常用命令操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 參數(shù)

    MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 參數(shù)

    這篇文章主要介紹了MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 參數(shù),需要的朋友可以參考下
    2015-08-08
  • mysql快速插入大量數(shù)據(jù)的正確方法

    mysql快速插入大量數(shù)據(jù)的正確方法

    在處理大量數(shù)據(jù)時(shí)如果一條一條地插入會(huì)極大地影響效率,因此批量插入是一個(gè)更好的選擇,下面這篇文章主要給大家介紹了關(guān)于mysql快速插入大量數(shù)據(jù)的正確方法,需要的朋友可以參考下
    2024-01-01
  • 深入理解MySQL?varchar(50)

    深入理解MySQL?varchar(50)

    日常開發(fā)中,數(shù)據(jù)庫建表是必不可少的一個(gè)環(huán)節(jié),建表的時(shí)候通常會(huì)看到設(shè)定某個(gè)字段的長(zhǎng)度為varchar(50),那么你知道是什么意思嗎,感興趣的可以了解一下
    2024-01-01
  • Mysql出生日期轉(zhuǎn)換為年齡并分組統(tǒng)計(jì)人數(shù)的方法示例

    Mysql出生日期轉(zhuǎn)換為年齡并分組統(tǒng)計(jì)人數(shù)的方法示例

    這篇文章主要給大家介紹了關(guān)于Mysql出生日期轉(zhuǎn)換為年齡并分組統(tǒng)計(jì)人數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論