最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)的作用:計算指定字段在查詢結果中出現(xiàn)的個數(shù)(不包含NULL值)

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

方式1:COUNT(*)
方式2:COUNT(1)
方式3:COUNT(具體字段):不一定對!
為什么說使用方式3,得到的結果不一定正確呢?這是因為 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前面。

當使用ROLLUP時,不能同時使用ORDER BY子句進行結果排序,即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;

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

WHEREHAVING 的對比

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

SELECT查詢的結構

方式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:關聯(lián)多表查詢時,去除笛卡爾積
(3)where:從表中篩選的條件
(4)group by:分組依據(jù)
(5)having:在統(tǒng)計結果中再次篩選
(6)order by:排序
(7)limit:分頁

SELECT語句執(zhí)行順序

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

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

相關文章

  • 簡單談談MySQL中的int(m)

    簡單談談MySQL中的int(m)

    設置int型的時候,需要設置int(M),以前知道這個M最大是255,但是到底應該設置多少并沒有在意。注意zerofill,今天我們來簡單探討下
    2016-09-09
  • MySQL存儲引擎InnoDB架構原理和執(zhí)行流程

    MySQL存儲引擎InnoDB架構原理和執(zhí)行流程

    InnoDB是MySQL的當前默認存儲引擎,支持外鍵、行級鎖定和ACID事務,通過BufferPool緩沖池緩存數(shù)據(jù),RedoLogBuffer和undo日志文件保證數(shù)據(jù)的持久性和回滾能力,MySQL宕機重啟時,InnoDB會根據(jù)LSN值決定是否需要從redo日志恢復數(shù)據(jù)
    2025-04-04
  • MySQL中刪除重復數(shù)據(jù)的簡單方法

    MySQL中刪除重復數(shù)據(jù)的簡單方法

    這篇文章主要介紹了MySQL中刪除重復數(shù)據(jù)的簡單方法,比起一般的NOT IN語句的效率更為高,需要的朋友可以參考下
    2015-05-05
  • CentOs7 64位 mysql 5.6.40源碼安裝過程

    CentOs7 64位 mysql 5.6.40源碼安裝過程

    這篇文章主要介紹了CentOs7 64位 mysql-5.6.40源碼安裝過程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • MySQL如何刪除mysql數(shù)據(jù)表內(nèi)的重復數(shù)據(jù)

    MySQL如何刪除mysql數(shù)據(jù)表內(nèi)的重復數(shù)據(jù)

    這篇文章主要介紹了MySQL如何刪除mysql數(shù)據(jù)表內(nèi)的重復數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • MySQL連接異常報10061錯誤問題解決

    MySQL連接異常報10061錯誤問題解決

    這篇文章主要介紹了MySQL連接異常報10061錯誤問題解決,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • mysql中Innodb 行鎖實現(xiàn)原理

    mysql中Innodb 行鎖實現(xiàn)原理

    InnoDB的行鎖是通過索引項加鎖實現(xiàn)的,分為使用索引和非索引字段檢索的情況,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10
  • 通過唯一索引S鎖與X鎖來了解MySQL死鎖套路

    通過唯一索引S鎖與X鎖來了解MySQL死鎖套路

    毫不夸張的說,有一半以上的死鎖問題由唯一索引貢獻,后面介紹的很多死鎖的問題都跟唯一索引有關。這次我們講一段唯一索引 S 鎖與 X 鎖的案例,下面小編來和大家一起學習一下
    2019-05-05
  • mysql表分區(qū)的方式和實現(xiàn)代碼示例

    mysql表分區(qū)的方式和實現(xiàn)代碼示例

    通俗地講表分區(qū)是將一個大表,根據(jù)條件分割成若干個小表,下面這篇文章主要給大家介紹了關于mysql表分區(qū)的方式和實現(xiàn)代碼,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • 小白安裝登錄mysql-8.0.19-winx64的教程圖解(新手必看)

    小白安裝登錄mysql-8.0.19-winx64的教程圖解(新手必看)

    這篇文章主要介紹了安裝登錄mysql-8.0.19-winx64的教程圖解,非常適合新手學習參考,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論

丰宁| 绥化市| 乌拉特中旗| 淮安市| 桃源县| 双牌县| 梨树县| 城市| 民权县| 徐州市| 曲阳县| 新晃| 洛浦县| 凤山市| 通江县| 临桂县| 大兴区| 揭东县| 台北县| 湄潭县| 左权县| 涪陵区| 丹阳市| 临朐县| 井陉县| 昆山市| 宜兰市| 怀柔区| 英山县| 岢岚县| 泌阳县| 兴安盟| 石渠县| 明星| 含山县| 佛坪县| 马尔康县| 和龙市| 巧家县| 图片| 延吉市|