SQL排序分组

1.排序

语法格式:select 列名,列名....,列名 from 表名 where 条件表达式 order by 要排序列的列名 ase/desc;

asc:表示升序排序,小到大

desc:表示降序,由大到小

eg.--查询员工信息,按照员工编号升序排序

select * from emp orede by sal asc;
select * from emp order by sal;

--如果是升序,asc可以省略不写。

--查询员工信息,按照员工编号降序排序

select * from emp order by empno desc;

order by :后面可以跟多个排序列,跟多个排序列的时候,他首先会按照第一排序列(紧跟order by 关键字的列)进行排序,如果第一个排序字段的值相同时,再按照第二个排序字段进行排序

eg.--查询员工信息,按照部门编号进行升序排序,如果部门编号相同,按照工资的升序进行排序

select * from emp order by deptno ,sal;

2.聚合函数

含义: 对一组值执行计算,并返回单个值

count(列名|*|常数): 用来求记录数也就是数据的条数

max(列名):取最大值

min(列名):取最小值

avg(列名):取平均值

sum(列名):求和

eg.--查询员工表中的员工人数

select count(*) from emp;
select count(empno) from emp;
select count(1) from emp;

--查询emp表中的部门数

select count(deptno) from emp;

distinct:去重关键字,跟在列名的最前面

select distinct deptno from emp;

--查找不同部门的数量

select count(distinct deptno) from emp;
select empno,distinct deptno from emp;--这个sql语句是错误的
select distinct empno,deptno from emp;--这是正确写法

注意:distinct后面跟多个列时,判断重复数据,所有列的值完全相同时,他才会认为是重复数据

--查询工资总和

select sum(sal) from emp;

--查询员工的平均工资

select avg(sal) from emp;

--查询10号部门的最高工资

select max(sal) from emp where deptno=10;

--查询十号部门的最低工资

select min(sal) from emp where deptno=10;

3.分组

语法:select 列名,列名.....,列名 from 表名 where 条件 group by 分组列 order by 排序列;

--查询各个部门的部门编号和部门的平均工资

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

注意:group by 后面跟的哪个列名在select后第一个就要跟哪个列名,不可以有其他列名,但可以跟聚合函数,要想查询多列的分组,group by后面也要跟多列,但跟多列时,只有当多个列值相同时,才会分为同一个组

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

4.having

select clo_name,col_name,....,col_name from 表名 where 条件 group by 分组列 having 条件 order by 排序列

having 是对分组后的数据进行筛选,条件表达式中可以使用聚合函数

--求平均工资大于2000的部门编号和平均工资

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

where 和 having 的异同

where 条件后面跟的条件比having后的条件先执行,条件中不允许使用聚合函数

having条件中可以使用聚合函数,一般having和group by 联用。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值