1. #进阶5:分组查询
  2. /*
  3. select 分组函数,列(要求出现在group by的后面)
  4. from 表 【where 筛选条件】 group by 分组的列表 【order by 子句】
  5. 注意:
  6. 查询列表必须特殊,要求是分组函数和group by后出现的字段
  7. 特点:
  8. 1.分组查询中的筛选条件分为两类
  9. 数据源 位置 关键字
  10. 分组前筛选 原始表 group by 前 where
  11. 分组后筛选 分组后的结果集 group by 后 having
  12.  
  13. 分组函数做条件,一定是放在having子句之中
  14.  
  15. group by子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或者函数(用的较少)
  16. 也可以添加排序(排序放在分组查询的最后)
  17.  
  18. */
  19.  
  20. # 引入:查询每个部门的平均工资
  21. select avg(salary) from employees; #这个是整个表格的基本工资
  22. #需要拆分小组
  23. select avg(salary),department_id from employees group by department_id; #这个结果不太对
  24.  
  25. select distinct department_id from employees;
  26.  
  27. #案例1:查询每个工种的最高工资
  28. select max(salary),job_id from employees group by job_id;
  29.  
  30. #案例2:查询每个位置上的部门个数
  31. select count(department_id),location_id from departments group by location_id;
  32.  
  33. #添加 分组前 筛选条件
  34. #案例1:查询邮箱中包含a字符的,每个部门的平均工资
  35. select avg(salary),department_id from employees where email like "%a%" group by department_id;
  36.  
  37. #案例2:查询有奖金的每个领导手下员工的最高工资
  38. select max(salary),manager_id from employees where commission_pct is not null group by manager_id;
  39.  
  40. #添加 分组后 的复杂的筛选条件
  41. #案例1:查询哪个部门的员工个数>2
  42. select count(*),department_id from employees where count(*)>2 group by department_id; #这个是错误的,因为employees中没有 count(*)>2
  43. 这里使用having
  44. select count(*),department_id from employees group by department_id having count(*)>2 ;
  45.  
  46. #案例2:查询每个工种有奖金的员工,他们的最高工资>12000的工种编号和最高工资
  47. select max(salary),job_id from employees where commission_pct is not null group by job_id; #获得有奖金条件下的,每个工种的最高工工资
  48. # 加上:他们的最高工资>12000的工种编号和最高工资
  49. select max(salary),job_id from employees where commission_pct is not null group by job_id having max(salary)>12000;
  50.  
  51. #案例3:查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低的工资
  52. 筛选条件:
  53. where manager_id>102
  54. having min(salary)>5000
  55. 完整:
  56. select min(salary),manager_id from employees where manager_id>102 group by manager_id having min(salary)>5000;
  57.  
  58. # group by 后跟 表达式或者分组函数(可以不是简单的字段)
  59. #案例:按照员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些
  60. select count(employee_id),length(last_name) from employees group by length(last_name) having count(employee_id)>5;
  61.  
  62. # 按照多个字段分组
  63. #案例:查询每个部门每个工种的员工的平均工资
  64. select avg(salary),department_id,job_id from employees group by department_id,job_id;
  65.  
  66. # 添加排序
  67. #案例:查询每个部门每个工种的员工的平均工资,并且按照平均工资的高低显示
  68. select avg(salary),department_id,job_id from employees group by department_id,job_id order by avg(salary) desc;
  69. order by 后面可以跟函数语句。
  70.  
  71. #题目1:查询各个job_id的员工工资的最大值、最小值、平均值、总和,并按照job_id升序
  72. select max(salary),min(salary),avg(salary),sum(salary),job_id from employees group by job_id order by job_id asc;
  73.  
  74. #题目2:查询员工最高工资和最低工资的差距(difference)
  75. select max(salary)-min(salary) difference from employees;
  76.  
  77. #题目3:查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内。
  78. 筛选条件:
  79. where manager_id is not null
  80. having min(salary)>=6000
  81. select min(salary),manager_id from employees where manager_id is not null group by manager_id having min(salary)>=6000;
  82.  
  83. #题目4:查询所有部门的编号,员工数量和工资的平均值,并按照平均工资降序
  84. select count(employee_id),avg(salary),department_id from employees group by department_id order by avg(salary) desc;
  85.  
  86. #题目5:选择具有各个job_id的员工人数
  87. select count(*),job_id from employees group by job_id;

  

MySQL 查询语句--------------进阶5:分组查询的更多相关文章

  1. MySQL 查询语句--------------进阶7:子查询

    #进阶7:子查询 /* 含义: 出现在其他语句中的select语句,称为子查询或者内查询 外部的查询语句,称为主查询或外查询 分类: 按照子查询出现的位置: select后面:只支持标量子查询 fro ...

  2. MySQL数据库查询操作进阶——多表查询

    多表查询 在大部分情况下,我们用到的表都是彼此相关联的,所以我们会有相当大的需求用到跨表的查询,这个时候我们就需要将相关联的表连起来做多表查询. 多表查询分为连表查询和子查询,连表查询即将相关联的表连 ...

  3. MySQL对数据表进行分组查询

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  4. MySQL对数据表进行分组查询(GROUP BY)

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  5. MySQL 查询语句--------------进阶6:连接查询

    #进阶6:连接查询 /* 含义:多个表格连接,当查询的字段来自于多个表时候,就会用到连接查询 我觉得这里类似于excel中的vlookup函数 笛卡尔乘积现象:表1有m行,表2有n行,结果有m*n行 ...

  6. MySQL 查询语句--------------进阶9:联合查询

    #进阶9:联合查询 /* union 联合 合并:将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union..... 应用场景:要查询的结果来自于多个表,且多个表没有 ...

  7. SEC7 - MySQL 查询语句--------------进阶3:排序查询

    # 进阶3:排序查询 /* 引入: select * from employees; 语法: select 查询列表 from 表 [where 筛选条件] order by 排序的列表 asc/de ...

  8. MySQL全面瓦解10:分组查询和聚合函数

    概述 相信我们经常会遇到这样的场景:想要了解双十一天猫购买化妆品的人员中平均消费额度是多少(这可能有利于对商品价格区间的定位):或者不同年龄段的化妆品消费占比是多少(这可能有助于对商品备货量的预估). ...

  9. MySQL之集合函数与分组查询

    这是分组查询用到的语句,也包括了排序以及常用的集合函数

随机推荐

  1. Snacks HDU 5692 dfs序列+线段树

    Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...

  2. [BNDSOJ] #1106代码

    #include<bits/stdc++.h> using namespace std; ]; ][]; int n; bool check(int i,int j) { ]==]==]= ...

  3. HDU 1494 题解(DP)

    题面: 跑跑卡丁车 Problem Description 跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣.这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加 ...

  4. poj_1995 Raising Modulo Numbers (快速幂)

    [题目链接] http://poj.org/problem?id=1995 [算法] 基本快速幂(二进制思想) 注意两个int相乘可能溢出,加(long long)但是相乘不要加括号,不然会先溢出在类 ...

  5. 7、purge_haplogs 基因组去冗余

    1.下载安装 https://bitbucket.org/mroachawri/purge_haplotigs/wiki/Install 1.Dependencies (in no particula ...

  6. ES6——generator-yield

    yield 既可传参,又可以返回 第一个next()传参无效,只用来启动 如果函数前漏掉 * 就是普通函数 如果有yield会报错, ReferenceError: yield is not defi ...

  7. ajax图片上传(asp.net +jquery+ashx)

    一.建立Default.aspx页面 <%@ Page Language="C#" AutoEventWireup="true"  CodeFile=&q ...

  8. 2018-2-13-Windows-10-16251-添加的-api

    title author date CreateTime categories Windows 10 16251 添加的 api lindexi 2018-2-13 17:23:3 +0800 201 ...

  9. Car的旅行路线(Floyd+模拟)

    题目地址 贼鸡儿猥琐的一道题 好在数据不毒瘤,而且Floyd就OK了. 这道题的难点在于 建图,也很考验模拟能力,需要十分的有耐心. 建图 题目中告诉了我们一个矩形的三个点 我们在平面直角坐标系中随便 ...

  10. frugally-deep: Header-only library for using Keras models in C++

    // Convenience wrapper around predict for models with // single tensor outputs of shape (1, 1, 1), / ...