1.select max(salary) mx_sal, min(salary) mi_sal,round(avg(salary),2) ag_sal,sum(salary) sm_sal from employees;
查詢最大值,最小值,平均值(保留2位),總和;
2.select datediff(max(hiredate),min(hiredate)) diffrence from employees;
查詢兩個時間的時間之差,然后取個別名;
3.select count(*) 個數 from employees where department_id = 90;
查看部門員工部門編號是90的員工個數;
4.分組查詢;
分組數據:group by子句語法;
可以使用group by子句將表中的數據分成若干組,where一定要放在from后面;
分組前的查詢:
select 分組函數,列(要求出現在group by的后面)from 表【where 篩選條件】group by 分組的列表【order by 子句】
注意:查詢列表必須特殊,要求是分組函數和group by后出現的字段
1.查詢每個工種的最高工資:
select max(salary),job_id from employees group by job_id;
2.查詢每個位置上的部門個數;
select count(*) department_id from departments group by department_id;
3.查詢郵箱中包含a字符的,每個部門的平均工資;
select avg(salary) 平均工資 ,department_id from employees where email like '%a%' group by department_id
4.查詢有獎金的每個領導手下員工的最高工資;
select max(salary) , manager_id from employees where commision_pct is not null
group by manager_id;
5.查詢哪個部門的員工個數>2:
分組后的查詢:
先查詢部門所有的人數;
select count(*) ,department_id from eployees group by department_id;
再去查人數>2的;
select count(*) ,department_id from eployees group by department_id having count(*)>2;
6.查詢每個工種有獎金的員工的最高工資>12000的的工種編號和最高工資;
首先查最高工資
select max(salary),job_id from employees where commission_pct is not no null group by job_id having max(salary)>12000;
7.select min(salary) ,manager_id from employees where manager_id >102 group by manager_id having min(salary)>5000
8.select count(*) c,length(last_name) len_name from employees group by len_name having c>5;
總結:
分組前篩選: 數據源 位置 group by 子句的前面 where
分組后篩選 分組后的結果集 group by 子句的后面 having
分組函數做條件,肯定是放在having語句中;
group by和having后面都支持別名,但是where不支持放別名;
9.多個字段分組:
select avg(salary) departmen_id ,job_id from employees group by departmen_id ,job_id;
10.
select avg(salary) departmen_id ,job_id from employees where departmmen_id is not null group by departmen_id ,job_id having avg(salary)>10000 order by avg(salary) desc;
select max(salary)