zoukankan      html  css  js  c++  java
  • 高级查询,分组查询

    分组查询
    定义:利用内置的分组函数来查询

      所谓分组,就是看待数据的“角度”不同。
      也就是把某类值相同的看做一组。

    语法:
    select 列名,组函数(列名)...from 表名
    where 条件
    group by 列
    having 字句
    order by 列

    分组函数:
    SUM([distinct] 列|表达式|值)   求和
    AVG([distinct] 列|表达式|值)   求平均值
    MAX(列|表达式|值)   求最大值
    MIN(列|表达式|值)    求最小值
    COUNT([distinct] 列|*)  求个数(包含null)

    如:

    -- 找出员工的最高、最低、平均、以及工资总和
    select max(salary),min(salary),avg(salary),sum(salary) from s_emp;

    -- 找出各部门员工的最高、最低、平均、以及工资总和
    select dept_id, max(salary),min(salary),avg(salary),sum(salary) from s_emp
    group by dept_id
    order by dept_id
    ;

    -- 找出41,42,50部门员工的最高、最低、平均、以及工资总

    select dept_id, max(salary),min(salary),avg(salary),sum(salary) from s_emp
    group by dept_id
    having dept_id in(41,42,50)
    order by dept_id
    ;

    select dept_id, max(salary),min(salary),avg(salary),sum(salary) from s_emp
    where dept_id in(41,42,50)
    group by dept_id
    order by dept_id
    ;




    注意1:只有出现在group by 后面的列[用来做为分组条件的列],才有资格
    写在SELECT的后面,除非使用组函数进行修饰。

    注意2:having 和where 都是条件
    区别:
    WHERE 子句中是不能使用 组函数的,因为它在GROUP BY 之前。
    但是,HAVING 子句中可以使用组函数,因为它在GROUP BY 之后。


    -- 统计各个职称中工资高于1100的各有多少人。
    select count(*),title
    from s_emp
    where salary >1100
    group by title;
    -- 找出订单数量超过>=2个的客户
    select c.name
    from s_customer c join s_ord o on o.customer_id = c.id
    group by c.id,c.name
    having count(o.id)>=2;

    -- 统计共计多少个员工
    select count(e.id) from s_emp e;


    -- 统计共计多少个职称[不能重复]
    select count(distinct title) from s_emp;

    练习:
    --1.找出超过(含)4个员工的部门id及部门名称
    select d.id,d.name,count(*)  from s_emp e
    left join s_dept d on e.dept_id = d.id
    group by d.id,d.name
    having count(*)>=4;

    --2.找出订单总费用超过10000元的客户
    select c.name,c.id from s_customer c
    left join s_ord o on c.id = o.customer_id
    where o.total>=10000
    group by c.name,c.id;

    --3.统计各区域的客户数量,按它的降序排序
    select r.id,r.name,count(*) from s_region r
    join s_customer c on c.region_id = r.id
    group by r.id ,r.name
    order by count(*)desc;

    --4.统计各经理的所管理的员工数
    select e.manager_id ,count(e.id) from s_emp e
    left join s_emp m on e.manager_id = m.id
    group by e.manager_id;
    --5.统计订单中各种支付的费用
    select sum(o.total) 费用,o.payment_type 支付方式 from s_ord o group by o.payment_type;

  • 相关阅读:
    AESUtil_1
    ELK配置
    Centos7上安装docker
    Excel大批量数据导出
    Redis5.0.6安装完整步骤
    idea远程打断点
    [HNOI2016] 序列
    [TJOI2017] 异或和
    洛谷 P4933 大师
    洛谷 P1950 长方形_NOI导刊2009提高(2)
  • 原文地址:https://www.cnblogs.com/w-xibao/p/7816349.html
Copyright © 2011-2022 走看看