mysql 分类查询_MySQL:分组查询
#進階5:分組查詢
/*語法:select 分組函數(shù),列(要求出現(xiàn)在group by的后面)from 表【where 篩選條件】group by 分組的列表【order by 子句】注意:查詢列表必須特殊,要求是分組函數(shù)和group by后出現(xiàn)的字段特點: 1.分組查詢中的篩選條件分為兩類數(shù)據(jù)源位置關(guān)鍵字分組前篩選原始表group by子句前面where分組后篩選分組后的結(jié)果集group by子句后面having①分組函數(shù)做條件肯定是放在having子句中②能用分組前篩選的優(yōu)先使用分組前篩選2、group by子句支持單個字段分組,多字段分組(多個字段之間用逗號隔開沒有順序要求),表達式或者函數(shù)(用的較少)3、也可以添加排序(排序放在整個分組查詢的最后)*/
#引入:查詢每個部門的平均工資
SELECT AVG(salary) FROM employees;
#簡單的分組查詢
#案例1:查詢每個工種的最高工資
SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id;
#案例2:查詢每個位置上的部門個數(shù)
SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;
#添加分組前的篩選條件
#案例1:查詢郵箱中包含a字符的,每個部門的平均工資
SELECT AVG(salary),department_id,email
FROM employees
WHERE email LIKE '%a%'
GROUP BY de partment_id
#案例2:查詢有獎金的每個領(lǐng)導(dǎo)手下員工的最高工資
SELECT MAX(salary),manager_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id
#添加分組后的篩選條件
#案例1:查詢那個部門的員工個數(shù)>2
#1.查詢每個部門的員工個數(shù)(涉及個數(shù)使用count(*))
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
#2.根據(jù)1的結(jié)果進行篩選,查詢哪個部門的員工個數(shù)>2
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;
#案例2:查詢每個工種有獎金的員工的最高工資>12000的工種編號和最高工資
#1.查詢每個工種有獎金的員工的最高工資
SELECT MAX(salary),job_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
#2.根據(jù)1的結(jié)果繼續(xù)篩選,最高工資>12000
HAVING MAX(salary) >12000;
#案例3:查詢領(lǐng)導(dǎo)編號>102的每個領(lǐng)導(dǎo)手下的最低工資大于5000的領(lǐng)導(dǎo)編號以及最低工資
#1.查詢領(lǐng)導(dǎo)編號>102的每個領(lǐng)導(dǎo)手下的員工固定最低工資
SELECT MIN(salary),manager_id
FROM employees
GROUP BY manager_id
#2.添加篩選條件:編號>102
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id >102
GROUP BY manager_id
3#添加篩選條件:最低工資>5000
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id >102
GROUP BY manager_id
HAVING MIN(salary) >5000;、
#按表達式或者函數(shù)分組
#案例1:按員工姓名長度分組,查詢每一組的員工個數(shù),篩選員工個數(shù)>5的有哪些
#①查詢每個長度的員工個數(shù)
SELECT COUNT(*),LENGTH(last_name) len_name
FROM employees
GROUP BY LENGTH(last_name);
#②添加篩選條件
SELECT COUNT(*) c,LENGTH(last_name) len_name
FROM employees
GROUP BY len_name
HAVING c;
#按多個字段分組
#案例:查詢每個部門,每個工種的員工的平均工資
SELECT AVG(salary),department_id,job_id
FROM employees
GROUP BY department_id,job_id;
#添加排序
#案例:查詢每個部門,每個工種的員工的平均工資并且按平均工資(大于10000)的高低顯示出來
SELECT AVG(salary),department_id,job_id
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id,job_id
HAVING AVG(salary)>10000
ORDER BY AVG(salary) DESC;
#1.查詢各job_id員工工資的最大值,最小值,平均值,總和,并按job——id升序
SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary),job_id
FROM employees
GROUP BY job_id
ORDER BY job_id ASC;
#2查詢最高工資和最低工資的差距(difference)
SELECT MAX(salary) - MIN(salary) difference
FROM employees;
#查詢各個管理者手下員工的最低工資,其中最低工資不能第于6000,沒有管理者的員工不計算在內(nèi)
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary) >=6000
#4查詢所有部門的編號,員工數(shù)量和工資平均值,并按平均工資降序
SELECT department_id,COUNT(*),AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary) DESC;
#5.選擇具有各個job_id的員工人數(shù)
SELECT job_id,COUNT(*)
FROM employees
GROUP BY job_id;
總結(jié)
以上是生活随笔為你收集整理的mysql 分类查询_MySQL:分组查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 憎恨之心最强套装攻略_憎恨之心装备获取技
- 下一篇: linux cmake编译源码,linu