• python学习笔记 day43 分组查询+ SQL执行顺序


      1. 分组查询

    当遇到“每”时一般需要考虑分组查询;

    比如“公司每个部门有多少人;” “公司有多少男员工,有多少女员工” 这种都需要用到分组查询;

    语法: select sum(salary),dept_id from person group by dept_id


    首先创建一张表:

    create table person(
      id int not null auto_increment primary key,
      name varchar(50) not null,
      age int not null,
      sex char(2) not null,
      salary int not null,
      dept_id int not null)
    
    select * from person
    
    insert into person values(1,"xuanxuan",22,"女",20000,1),(2,"xixi",23,"女",10000,1),(3,"dongdong",24,"男",17000,1),(4,"haha",25,"男",19000,2),(5,"hehe",25,"男",22000,2),(6,"menmeng",24,"女",16000,2),(7,"duoduo",25,"男",22000,3),(8,"haohao",24,"男",19000,3)
    select * from person

    运行结果:

    1. 查询每个部门薪资总额,并且显示部门信息:----需要用到分组查询:

    select sum(salary),dept_id from person group by dept_id;  # 按照det_id分组,查询每个部门薪资总额

    运行结果:

     

     2. 分组查询还可以加条件: 查询薪资总额大于45000的所有部门----需要用到分组查询(按照部门分组,计算每一部门的薪资总额)+条件(部门薪资总额大于45000的)

    select sum(salary),dept_id from person group by dept_id having sum(salary)>45000;   # 先按照部门分组,计算每一个部门的总薪资,然后加上条件 薪资总额大于45000的才显示,配合group by 使用的条件是having
    (其实相当于where 只不过where优先级大于group by 所以不能放在group by后面,只能使用having与group by配合使用)

    运行结果:


     3. 如果想要查看每个部门的最大薪资是多少:

    select max(salary),dept_id from person group by dept_id;  # 查看每一个部门的最大薪资

    运行结果:

     

    4. 如果想查看每一个部门的平均薪资(avg(salary)),并且显示部门的人员信息:

    如果是:(不正确解法:)

    select avg(salary),name,dept_id from person group by dept_id;  # 查看每一部门的平均薪资,但是这样直接name放在这里,并不会显示该组内所有人员信息,只会显示一个(类似扑克牌分组堆叠,只会显示最上面那个)

    运行结果:

     

    所以正确做法应该是:(在需要显示组内全部信息的字段加上group_concat(要组内全部显示的信息)

    select avg(salary),group_concat(name),dept_id from person group by dept_id;

    运行结果:

    小作业:查询平均薪资大于20000的部门,并且看该部门员工都有谁:(用到分组查询+条件+显示组内某一字段全部信息)

    select sum(salary),group_concat(name),dept_id from person where name is not null group by dept_id order by sum(salary) limit 0,5

    运行结果:

    2. 分页显示:需要用到limit 关键字,第一个参数是起始从哪一条开始,第二个参数是一页一共显示多少条

    select * from person limit 0,4;  # 查看表person,从第一条开始显示,总共显示条;
    select * from person limit 4,5;   # 从第五条开始显示,一共显示5条(5-8

    运行结果:

     

    3. SQL执行顺序

     

    执行顺序是:

    from person(看哪一张表) ---> where name is not null(条件)--->group by(按照什么分组)---having(分组查询条件)---select(查询)---order by (按照什么排序)--limit(显示)

     首先先看是哪一张表from person,然后where看下条件,接着看分组group by 然后看分组的条件 having 然后select查询 接着对查询到的结果排序order 排序结束显示limit;

    4. 作业(待完成)

    http://www.cnblogs.com/wangfengming/articles/7944029.html

    http://www.cnblogs.com/wangfengming/articles/7889786.html

    talk is cheap,show me the code
  • 相关阅读:
    1295. 统计位数为偶数的数字『简单』
    1281. 整数的各位积和之差『简单』
    697. 数组的度『简单』
    748. 最短完整词『简单』
    832. 翻转图像『简单』
    1446. 连续字符『简单』
    1455. 检查单词是否为句中其他单词的前缀『简单』
    1160. 拼写单词『简单』
    1304. 和为零的N个唯一整数『简单』
    1103. 分糖果 II『简单』
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9867429.html
Copyright © 2020-2023  润新知