mysql基础-分组查询

1  语法:

    select 分组函数,列(要求出现在 group by 的后边)

    from 表

    【where 筛选条件】

    group by 分组的列表

     【order by 子句】

注意:查询列表必须特殊,要求是分组函数和 group by 之后出现的字段。

1.1  特点

1.1.1  分组查询中的筛选条件分为两类

                               数据源                                     位置                             关键字

分组前筛选           原始表                            group by 子句的前面                where

分组后筛选           分组后的结果集              group by 子句的后面                having

         a.分组函数做条件肯定是放在having子句中

         b.能用分组前筛选的、就优先考虑使用分组前筛选

1.1.2  group by 子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开,没有顺序要求),表达式或函数(用的相对较少)。

1.1.3  也可以添加排序(排序放在整个分组查询的最后)。

2  简单的分组查询

 

 3  添加筛选条件

 

 

 4  添加复杂的筛选条件

 

 

 

 

 

 

 

 

 5  按多个字段分组

 

 添加排序

 

 6  综合案例

a.查询各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;

b.查询员工最高工资和最低工资的差距(DIFFERENCE)

SELECT MAX(salary)-MIN(salary) DIFFRENCE
FROM employees;

c.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内

SELECT MIN(salsry),manager_id 
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary)>=6000;

d.查询所有部门的编号,员工数量和工资平均值,并按平均工资降序

SELECT dapartment_id,count(*),AVG(salary) a
FROM employees
GROUP BY dapartment_id
ORDER BY a DESC;

e.选择具有各个job_id 的员工人数

SELECT COUNT(*) 个数,job_id
FROM employees
GROUP BY job_id;

猜你喜欢

转载自www.cnblogs.com/xiao-yuge/p/12573440.html