• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小禹哥。
博客园    首页    新随笔    联系   管理    订阅  订阅
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;

 

posted on 2020-03-26 12:05  小禹爸爸  阅读(226)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3