mysql之過(guò)濾分組的具體實(shí)現(xiàn)
在MySQL中,過(guò)濾分組數(shù)據(jù)通常使用 GROUP BY 結(jié)合 HAVING 子句和 WHERE 子句。GROUP BY 子句用于將結(jié)果集按一個(gè)或多個(gè)列進(jìn)行分組,而 HAVING 子句用于過(guò)濾分組后的數(shù)據(jù)。WHERE 子句用于過(guò)濾分組前的數(shù)據(jù)。下面是具體的用法和示例:
GROUP BY 子句
GROUP BY 子句用于根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組。通常結(jié)合聚合函數(shù)(如 COUNT、SUM、AVG、MAX、MIN)使用。
基本語(yǔ)法
SELECT column1, column2, aggregate_function(column3) FROM table_name WHERE condition GROUP BY column1, column2 ORDER BY column1, column2;
示例
- 按部門(mén)分組統(tǒng)計(jì)員工人數(shù):
SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id;
HAVING 子句
HAVING 子句用于過(guò)濾分組后的數(shù)據(jù)。它的作用類(lèi)似于 WHERE 子句,但 WHERE 子句是在分組前過(guò)濾記錄,而 HAVING 子句是在分組后過(guò)濾記錄。
基本語(yǔ)法
SELECT column1, column2, aggregate_function(column3) FROM table_name WHERE condition GROUP BY column1, column2 HAVING aggregate_function(column3) condition ORDER BY column1, column2;
示例
- 按部門(mén)分組統(tǒng)計(jì)員工人數(shù),并只顯示員工人數(shù)超過(guò)5人的部門(mén):
SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id HAVING COUNT(*) > 5;
- 按部門(mén)分組統(tǒng)計(jì)員工平均工資,并只顯示平均工資高于5000的部門(mén):
SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id HAVING AVG(salary) > 5000;
結(jié)合 WHERE 和 HAVING
WHERE 子句和 HAVING 子句可以一起使用,WHERE 子句用于過(guò)濾原始數(shù)據(jù),HAVING 子句用于過(guò)濾分組后的數(shù)據(jù)。
示例
- 在計(jì)算平均工資前過(guò)濾掉工資低于3000的員工,并按部門(mén)分組統(tǒng)計(jì)員工平均工資,只顯示平均工資高于5000的部門(mén):
SELECT department_id, AVG(salary) AS average_salary FROM employees WHERE salary >= 3000 GROUP BY department_id HAVING AVG(salary) > 5000;
復(fù)雜示例
以下是一個(gè)更復(fù)雜的示例,展示了如何結(jié)合使用 GROUP BY、HAVING 和聚合函數(shù)來(lái)進(jìn)行數(shù)據(jù)分析:
- 統(tǒng)計(jì)每個(gè)部門(mén)的員工人數(shù)、平均工資和最高工資,并只顯示員工人數(shù)超過(guò)10且平均工資高于4000的部門(mén):
SELECT department_id,
COUNT(*) AS employee_count,
AVG(salary) AS average_salary,
MAX(salary) AS max_salary
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 10 AND AVG(salary) > 4000;
注意事項(xiàng)
WHERE與HAVING的區(qū)別:WHERE用于過(guò)濾原始數(shù)據(jù)行,HAVING用于過(guò)濾分組后的數(shù)據(jù)行。- 使用聚合函數(shù):
HAVING子句通常用于包含聚合函數(shù)的條件過(guò)濾。 - 性能考慮:在大型數(shù)據(jù)集上,盡量先使用
WHERE子句進(jìn)行初步過(guò)濾,以減少分組和聚合的數(shù)據(jù)量,從而提高查詢(xún)性能。
到此這篇關(guān)于mysql之過(guò)濾分組的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)mysql 過(guò)濾分組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
安裝配置mysql及Navicat prenium的詳細(xì)流程
這篇文章主要介紹了安裝配置mysql及Navicat Premium的詳細(xì)流程,配置方法也真的很簡(jiǎn)單,本文給大家詳細(xì)介紹mysql Navicat Premium安裝配置相關(guān)知識(shí)感興趣的朋友,一起學(xué)習(xí)吧2021-06-06
PhpMyAdmin 配置文件現(xiàn)在需要一個(gè)短語(yǔ)密碼的解決方法
本文主要介紹PhpMyAdmin 配置文件現(xiàn)在需要一個(gè)短語(yǔ)密碼的解決方法,比較實(shí)用,希望能給大家做一個(gè)參考。2016-06-06
Linux下編譯安裝Mysql 5.5的簡(jiǎn)單步驟
Linux下面因?yàn)閺腗ySQL 5.5開(kāi)始使用cmake來(lái)做config了,所以編譯安裝的會(huì)和5.1版本有些區(qū)別。不過(guò)總體來(lái)說(shuō)還是差別不大2015-08-08
MySQL實(shí)現(xiàn)創(chuàng)建存儲(chǔ)過(guò)程并循環(huán)添加記錄的方法
這篇文章主要介紹了MySQL實(shí)現(xiàn)創(chuàng)建存儲(chǔ)過(guò)程并循環(huán)添加記錄的方法,涉及基本的mysql存儲(chǔ)過(guò)程創(chuàng)建、調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2017-05-05

