DQL语言学习(Data Query Languge)
表数据链接: https://pan.baidu.com/s/1uDxNjKVKlz9uVicf9IYCkg 提取码: 2y1w
二、分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:sum、avg、max、min、count
SELECT SUM(salary)
FROM employees;
SELECT AVG(salary)
FROM employees;
SELECT MAX(salary)
FROM employees;
SELECT MIN(salary)
FROM employees;
SELECT COUNT(salary)
FROM employees;
SELECT SUM(salary) 和,AVG(salary) 平均,MAX(salary) 最高, MIN(salary) 最低,COUNT(salary) 个数
FROM employees;
和distinc搭配
SELECT SUM(DISTINCT salary),SUM(salary)
FROM employees;
SELECT COUNT(DISTINCT salary),COUNT(salary)
FROM employees;
COUNT()函数
#统计个数
SELECT COUNT(salary)
FROM employees;
SELECT COUNT(*)
FROM employees;
#等价*
SELECT COUNT(1)
FROM employees;
分组查询
语法:
SELECT 分组函数,列(要求出现在group by的后面)
FROM 表
WHERE 筛选条件
GROUP BY 分组的列表
ORDER BY 子句
特点:
分组查询做条件要放在having字句中
group by子句支持放个字段分组、多个字段分组
order by放在整个分组查询后面
案例::查询每个工种的最高工资
SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id;
案例:查询每个位置上的部门个数
SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;
案例:查询又想中包含a字符的,每个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id;
案例:有奖金的每个领导手下员工的最高工资
SELECT MAX(salary),manager_id
FROM employees
WHERE commission_pct is NOT NULL
GROUP BY manager_id;
案例:那个部门的员工个数>2
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;
案例6:
查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
查询每个工种有奖金的员工的最高工资
SELECT MAX(salary),job_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id;
最高工资大于12000
SELECT MAX(salary),job_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;
案例:查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及最低工资
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id>102
GROUP BY manager_id
HAVING MIN(salary)>5000;
按表达式或函数分组
案例:按员工名的长度分组,查询每一组员工个数,筛选员工个数>5的有哪些
SELECT COUNT(*),LENGTH(last_name) len_name
FROM employees
GROUP BY len_name
HAVING COUNT(*)>5;
按多个字符分组
案例:查询每个部门每个工种的员工的平均工资
SELECT AVG(salary),department_id,job_id
FROM employees
GROUP BY department_id,job_id;
添加排序
查询每个部门每个工种的员工的平均工资,并按照平均工资的高低显示
SELECT AVG(salary),department_id,job_id
FROM employees
GROUP BY department_id,job_id
HAVING AVG(salary)>10000
ORDER BY AVG(salary) DESC;