欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql(二) 聚合函数 group by , having, inner join , limit

程序员文章站 2022-07-13 16:08:40
...


聚合函数

原列表,以此列表为基础,实现各种函数功能(因图片太大,作者只截取了部分)
Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit

1.求平均数

select AVG(sal) FROM emp;

Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit

2.求最大值

SELECT max(sal)FROM emp;

Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit

3.求最小数

SELECT min(sal) FROM emp;

Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit

4.求sal数量总数

SELECT count(sal) FROM emp;

Mysql(二) 聚合函数 group by , having, inner join , limit

分组函数不能单独用在where条件中,但能通过与select联合与where使用

分组查询

GROUP BY 
GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)
这是一个数据库表
Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit
通过deptno求出每种数据各有多少种
输入下列语句:
此处为错误语句,原因上文已说
select deptno,sal from emp group by deptno;
你以为结果是这样的:
Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit
当然这只是一厢情愿
实际是这样的:
Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit
若要得到如下结果,这就需要聚合函数的参与
使用下列sql语句即可得到如下结果:
select deptno,count(sal) from emp group by deptno;
Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit

查询过滤

having

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。

例如:

  通过sql语句查询并过滤求出一个平均数大于1600小于2400的值:(两种方法)

select deptno d, ROUND(avg(sal),2)a from emp  GROUP BY deptno HAVING a>1600 and a<2400;
select deptno d, ROUND(avg(sal),2) a from emp  GROUP BY deptno HAVING  a between 1600 and 2400;

平均数图

Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit

结果

Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit

链表

链表就是将两个不同的表,但拥有相同列名通过用inner join   onlian
拼接在一个表中(此处显示表是虚表,不是真实存在数据库中,只是临时存在)
99版语法
SELECT *(一般不写星,直接写具体查询表的列名)from emp(表) e(别名)inner jion dept d on e.deptno=deptno;
具体
SELECT e.job,d.loc from emp  e inner JOIN dept  d on  e.deptno=d.deptno;
92版语法:
SELECT e.*,d.*FROM emp e,dept d where e.deptno=d.deptno;
SELECT e.empno,d.loc FROM emp e,dept d where e.deptno=d.deptno;
附地址:http://blog.csdn.net/xiaoxiong_web/article/details/71107401
链表例子:
select  d.dname 部门名称,xin.job 工作,xin.ename 员工名,xin.he 工资合, xin.bb 部门编号 from(SEL ECT job,ename,SUM(sal) he,deptno bb from emp GROUP BY deptno ) xin  INNER JOIN dept d on dept no
显示结果
Mysql(二) 聚合函数 group by , having, inner join , limit
Mysql(二) 聚合函数 group by , having, inner join , limit
SELECT xin.ss,d.dname from(SELECT deptno,sum(sal) ss from emp e GROUP BY deptno)xin INNER JOIN dept  d on xin.deptno=d.deptno;
效果图
Mysql(二) 聚合函数 group by , having, inner join , limit
Mysql(二) 聚合函数 group by , having, inner join , limit

limit函数(分页):

在数据库中经常要取表中记录中间的记录,在sql语句中使用limit


select * from a limit 4,20 

理解:从表中的第五行数据开始取数据,一共取出20条

这个用法可以实现sql语句分页,只需要传进页数和每条页数两个参数即可以实现分页select sal ,ename from emp ORDER BY sal

注:limit是从0开始计算,小技巧:若要跳到第4页数值则计算规则为
(4-1)*20 从第四页开始显示
代码:

select * from a limit 60,20
例:
Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit
每三行为一页,显示第三页,代码如下:
select sal ,ename from emp ORDER BY sal limit 6,3;
Mysql(二) 聚合函数 group by , having, inner join , limitMysql(二) 聚合函数 group by , having, inner join , limit



ps:

此文为作者随笔,书写并不规范。