亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mysql使用聚合函數(shù)時需要注意事項

 更新時間:2024年08月01日 10:30:34   作者:@See you later  
聚合函數(shù)作用于一組數(shù)據(jù),并對一組數(shù)據(jù)返回一個值,常見的聚合函數(shù):SUM()、MAX()、MIN()、AVG()、COUNT(),這篇文章主要介紹了Mysql使用聚合函數(shù)時需要注意事項,需要的朋友可以參考下

聚合函數(shù)

聚合函數(shù)作用于一組數(shù)據(jù),并對一組數(shù)據(jù)返回一個值。
常見的聚合函數(shù):SUM()、MAX()、MIN()、AVG()COUNT()

對COUNT()聚合函數(shù)的更深一層理解

COUNT函數(shù)的作用:計算指定字段在查詢結(jié)果中出現(xiàn)的個數(shù)(不包含NULL值)

如果計算表中有多少條記錄,如何實現(xiàn)?

方式1:COUNT(*)
方式2:COUNT(1)
方式3:COUNT(具體字段):不一定對!
為什么說使用方式3,得到的結(jié)果不一定正確呢?這是因為 COUNT 計算字段出現(xiàn)的個數(shù)時,是不計算NULL值的?;蛘哒f,COUNT(*)會統(tǒng)計值為 NULL 的行,而 COUNT(字段)不會統(tǒng)計此字段為 NULL 值的行

舉個栗子,需求:查詢公司中平均獎金率

SELECT  SUM(commission_pct)/COUNT(commission_pct)
FROM employees;

上面的 mysql 代碼 是錯誤的,因為 并不是所有的員工都有獎金率,可能存在沒有獎金的員工,他/她的commission_pct字段的記錄為 NULL。
正確的mysql語句如下:

SELECT SUM(commission_pct) / COUNT(IFNULL(commission_pct,0)), AVG(IFNULL(commission_pct,0))
FROM employees;

如何需要統(tǒng)計表中的記錄數(shù),使用COUNT(*)、COUNT(1)、COUNT(具體字段) 哪個效率更高呢?

如果使用的是 MyISAM 存儲引擎,則三者效率相同,都是O(1)
如果使用的是 InnoDB 存儲引擎,則三者效率:COUNT(*) = COUNT(1) > COUNT(字段)

GROUP BY 的一些鮮為人知的事兒

SELECT 中出現(xiàn)的非組函數(shù)的字段必須聲明在 GROUP BY 中。反而,在 GROUP BY 中聲明的字段可以不出現(xiàn)在SEELCT中。

SELECT job_id,department_id,AVG(salary)
FROM employees
GROUP BY job_id,department_id;

GROUP BY聲明在FROM后面,WHERE后面,ORDER BY前面,LIMIT前面。

當(dāng)使用ROLLUP時,不能同時使用ORDER BY子句進(jìn)行結(jié)果排序,即ROLLUP和ORDER BY是互相排斥的。

  • HAVING 的小秘密 如果過濾條件中使用了聚合函數(shù),則必須使用 HAVING 來替換 WHERE,否則報錯。
  • HAVING 必須聲明在 GROUP BY 的后面。
  • 在開發(fā)中,我們使用HAVING的前提是 SQL 中使用了 GROUP BY
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 10000;

當(dāng)過濾條件中沒有聚合函數(shù)時,則此過濾條件聲明在WHERE中或HAVING中都可以,但是建議大家聲明在WHERE中。

WHEREHAVING 的對比

  • 從適用范圍上來講,HAVING的適用范圍更廣。
  • 如果過濾條件中沒有聚合函數(shù):這種情況下,WHERE的執(zhí)行效率要高于HAVING

SELECT查詢的結(jié)構(gòu)

方式1:

SELECT ...,....,...
 FROM ...,...,....
 WHERE 多表的連接條件
AND 不包含組函數(shù)的過濾條件
GROUP BY ...,...
 HAVING 包含組函數(shù)的過濾條件
ORDER BY ... ASC/DESC
 LIMIT ...,...

方式2:

SELECT ...,....,...
FROM ... JOIN ... 
ON 多表的連接條件
JOIN ...
ON ...
WHERE 不包含組函數(shù)的過濾條件
AND/OR 不包含組函數(shù)的過濾條件
GROUP BY ...,...
HAVING 包含組函數(shù)的過濾條件
ORDER BY ... ASC/DESC
LIMIT ...,...

其中:

(1)from:從哪些表中篩選
(2)on:關(guān)聯(lián)多表查詢時,去除笛卡爾積
(3)where:從表中篩選的條件
(4)group by:分組依據(jù)
(5)having:在統(tǒng)計結(jié)果中再次篩選
(6)order by:排序
(7)limit:分頁

SELECT語句執(zhí)行順序

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT

到此這篇關(guān)于Mysql使用聚合函數(shù)時需要注意事項的文章就介紹到這了,更多相關(guān)mysql聚合函數(shù)使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL約束與索引概念詳解

    MySQL約束與索引概念詳解

    約束是用來對數(shù)據(jù)業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性進(jìn)行實施、維護(hù)。約束的作用范圍僅限在當(dāng)前數(shù)據(jù)庫,約束可以被當(dāng)做數(shù)據(jù)庫對象來處理,它們具有名稱和關(guān)聯(lián)模式,是邏輯約束,不會因為設(shè)置約束而額外占用空間
    2023-04-04
  • MYSQL中EXISTS的用法小結(jié)

    MYSQL中EXISTS的用法小結(jié)

    在MySQL數(shù)據(jù)庫中,EXISTS是一種強(qiáng)大的工具,用于處理復(fù)雜的查詢需求,本文主要介紹了MYSQL中EXISTS的用法小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • mysql 8.0.15 winx64安裝配置方法圖文教程

    mysql 8.0.15 winx64安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.15 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • mysql sql語句性能調(diào)優(yōu)簡單實例

    mysql sql語句性能調(diào)優(yōu)簡單實例

    這篇文章主要介紹了 mysql sql語句性能調(diào)優(yōu)簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • mysql語句性能分析工具之profiling用法

    mysql語句性能分析工具之profiling用法

    這篇文章主要介紹了mysql語句性能分析工具之profiling用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 使用Canal監(jiān)聽MySQL Binlog日志的實現(xiàn)方案

    使用Canal監(jiān)聽MySQL Binlog日志的實現(xiàn)方案

    本文檔探討了在分布式系統(tǒng)中處理超時未支付訂單的挑戰(zhàn)與解決方案,文檔還詳細(xì)介紹了MySQL Binlog的配置、Canal中間件的部署與配置,以及消息監(jiān)聽處理的實現(xiàn),確保了方案的可操作性,需要的朋友可以參考下
    2024-12-12
  • 如何使用mysql語句進(jìn)行多表聯(lián)查(以三個表為例)

    如何使用mysql語句進(jìn)行多表聯(lián)查(以三個表為例)

    這篇文章主要介紹了如何使用mysql語句進(jìn)行多表聯(lián)查(以三個表為例),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 詳解MySQL中的NULL值

    詳解MySQL中的NULL值

    這篇文章主要介紹了MySQL中的NULL值的相關(guān)知識,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 使MySQL查詢區(qū)分大小寫的實現(xiàn)方法

    使MySQL查詢區(qū)分大小寫的實現(xiàn)方法

    我們在MySQL中使用SELECT語句查詢時,可不可以使查詢區(qū)分大小寫?今天從網(wǎng)絡(luò)上找到了方法,現(xiàn)總結(jié)如下。
    2010-12-12
  • mysql刪除重復(fù)記錄并且只保留一條的實現(xiàn)方法

    mysql刪除重復(fù)記錄并且只保留一條的實現(xiàn)方法

    本文主要介紹了mysql刪除重復(fù)記錄并且只保留一條的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評論