数据库之排序,分组,分页

排序 order by

  • 格式: order by 排序的字段名 asc升序(默认)/desc降序;
  1. 查询每个员工的姓名和工资,按照工资升序

select name,sal from emp order by sal;

select name,sal from emp order by sal asc;

  1. 查询每个员工的姓名和工资,按照工资降序

select name,sal from emp order by sal desc;

  1. 查询工资高于2000的员工姓名和工资, 按照工资降序排序

select name,sal from emp where sal>2000 order by sal desc;

  1. 查询姓名,工资和部门id 按照部门id升序排序,如果部门id一致则按照工资降序排序

select name,sal,dept_id from emp order by dept_id,sal desc;

分页查询 limit

  • 格式: limit 跳过的条数,请求的条数(每页的条数)
  • 跳过的条数=(请求的页数-1)*每页的条数
  • 举例:
    • 第一页的5条数据 limit 0,5
    • 第2页的5条数据 limit 5,5
    • 计算(2-1)*5 
    • 第3页的5条数据 limit 10,5
    • 别名

      select name as "名字" from emp;

      select name "名字" from emp;

      select name 名字 from emp;

      聚合函数

      • 可以对查询到的多条数据进行统计查询
      • 统计方式包括:
        • 求平均值
        • 求和
        • 求最大值
        • 求最小值
        • 计数
      1. 平均值avg(字段名)
        1. 查询1号部门的平均工资

      select avg(sal) from emp where dept_id=1;

      b. 查询销售的平均工资

      select avg(sal) from emp where job='销售';

      1. 最大值max(字段名)
      1. 查询最高工资

      select max(sal) from emp;

      1. 最小值min(字段名)
        1. 查询最低工资

      select min(sal) from emp;

      1. 求和sum(字段名)
      1. 查询程序员的工资总和

      select sum(sal) from emp where job='程序员';

      1. 计数count(*)
      1. 查询销售的数量

      select count(*) from emp where job="销售";

      分组查询 group by

      • 分组查询可以将某个字段相同值的数据划分为一组, 然后以组为单位进行统计查询
      1. 查询每个部门的人数

      select count(*) from emp where dept_id=1;

      select count(*) from emp where dept_id=2;

      select count(*) from emp where dept_id=3;

      select dept_id,count(*) from emp group by dept_id;

      1. 查询每种工作的人数

      select job,count(*) from emp group by job;

      1. 查询每种工作的平均工资

      select job,avg(sal) from emp group by job;

      1. 查询每个部门的最高工资

      select dept_id,max(sal) from emp group by dept_id;

      1. 查询每个部门工资高于2000的人数

      select dept_id,count(*) from emp where sal>2000 group by dept_id;

      1. 查询每种工作的最低工资

      select job,min(sal) from emp group by job;

      1. 查询1号部门和2号部门的人数

      select dept_id,count(*) from emp where dept_id in(1,2) group by dept_id;

      1. 查询平均工资最高的部门id和平均工资

      select dept_id,avg(sal) from emp group by dept_id order by avg(sal) desc limit 0,1;

      • 通过别名 复用

      select dept_id,avg(sal) a from emp group by dept_id order by a desc limit 0,1;

      having

      • where后面只能写普通字段的条件, 不能写聚合函数条件
      • having后面专门用来写聚合函数条件, 而且having要和group by 结合使用 写在group by的后面
      1. 查询每个部门的平均工资,只查询出平均工资大于2000

      select dept_id,avg(sal) from emp group by dept_id having avg(sal)>2000;

      select dept_id,avg(sal) a from emp group by dept_id having a>2000;

      1. 查询每种工作的人数,只查询人数大于1的

      select job,count(*) c from emp group by job having c>1;

      1. 查询每个部门的工资总和,只查询有领导的员工, 并且要求工资总和大于5400.

      select dept_id,sum(sal) s from emp

      where manager is not null group by dept_id having s>5400;

      4. 查询每个部门的平均工资, 只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的

      select dept_id,avg(sal) a from emp

      where sal between 1000 and 3000 group by dept_id having a>=2000;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值