MySQL聚合函数

MySQL聚合函数,第1张

很多时候,我们查询数据的时候都不会把明细数据查询出来,那样一般意义也不大。更多的时候是根据业务需求,把数据聚合成业务能直接使用的数据。MYSQL中有5个聚合函数,如下面5个,用的最多的还是count和sum,下面分别介绍一下用法。

【COUNT】

在MySQL中,COUNT()函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数,使用方法有以下两种:

求order表中,查询一共有多少条订单数,SQL语句如下↓

【SUM】

在MySQL中,SUM()是一个求总和的函数,返回指定列值的总和。

求order表中所有产品销售数量,SQL语句如下↓

【AVG】

在MySQL中,AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。

求order表中,2021年所有产品的平均单价,SQL语句如下↓

【MAX/MIN】

在MySQL中,MAX()函数是用来返回指定列中的最大值。

求order表中,查询最大的单价价格,SQL预计如下↓

在MySQL中,MIN()函数是用来返回指定列中的最小值。

求order表中,查询最小的单价价格,SQL预计如下↓

【结合GROUP BY】

正常情况下,聚合函数都是搭配着GROUP BY来使用的。可以是按省份聚合、产品聚合、时间聚合等等。下面演示每个品牌最低单价的聚合,其他几个聚合函数使用方式一样,SQL语句如下↓

还可以用ORDER BY排个序,求每个品牌累计销售价格的SQL语句,从高到低排序↓

End

◆ PowerBI开场白

◆ Python高德地图可视化

◆ Python不规则条形图

in *** 作符允许我们在 WHERE 子句中规定多个值。

where 字段名 in (值1,值2,值3....)

示例: where age in (20,21,25)

age 字段的值 只要是 20或者21或者25 的数据 都满足条件

where not in (值1,值2,值3....)</pre>

示例: where age in (20,21,25)

age 字段的值 只要 不是 20或者21或者25 的数据 都满足条件

select *

from sc

where score in (70,80,90)

select *

from sc

where score not in (70,80,90)

select *

from student

where birthday in ('1990-01-01','1990-12-21','2017-12-20','2012-06-06')</pre>

select *

from student

where birthday not in ('1990-01-01','1990-12-21','2017-12-20','2012-06-06')

MySQL中的分页查询, limit 通常放在sql 语句的最末尾

limit 4

查询前4条数据

limit 4,3

从第4条数据之后开始,查询3条数据

也就是 第5,6,7条的数据

limit 4 offset 10

offset后面的数字是指记录数

从第10条 之后的数据开始 查询4条数据

也就是 第 11,12,13,14条数据

select * from student limit 5

select * from student limit 9,6

select * from student limit 6 offset 9

查询成绩表中 前7条的数据;

select * from sc limit 7

查询成绩表中 第 5到10 条的数据

select * from sc limit 4,6

查询成绩表中 第 3到8 条的数据

select * from sc limit 2 , 6

如果字段没有要求非空,则字段值 可以为空,就是null值。如果要查询某个 字段 为 null的数据,不能使用 字段名=null,要用 字段名 is null;

where 字段名 is null;

字段名 为空的符合条件

where 字段名 is not null;

字段名 不为空的符合条件

1.查询teacher表,给tid 起别名为 教师编号,tname 起别名为 教师姓名

select tid as 教师编号,tname as 教师姓名 from teacher

2.查询 sc 表, 给 cid 起别名为 课程编号,sid 起别名为 学生编号, score起别名为分数;

select cid 课程编号 ,sid 学生编号,score 分数 from sc

3.查询 course 表,给表起别名为 c,使用 c.字段查询 表数据

select c.* from course as c

起别名是为了后续学习多表联查 做铺垫,语法十分简单

比如查询 student 表的 学生姓名 和 生日 的sql语句:

select sname,birthday from student

给 sname,birthday字段 起别名 ,改为中文

select sname as 姓名,birthday as 生日 from student

起了别名后,查出来的字段会以别名展示。

as 关键字也可以省略,字段名 和 别名之间 用空格隔开即可

select sname 姓名, birthday 生日 from student

例子:

select a.sname, a.birthday from student as a

给表 起别名 同样是 使用 as关键字(可以使用空格隔开代替as关键字), a 就代表 student表,查询字段时,可以 使用 a.sname 代表 student的sname字段。

给表起别名 通常用在 多表查询,本次使用演示,先熟悉语法。

在某些复杂的场景下,可能需要多条sql 才能查询出想要的数据,把多条sql拼接起来 就是嵌套查询

句式1

select XXX from A表 where xx =/in (select XXX from B表)

句式2

select XXX from (select XXX from XXXX)b

句式3

select XXX from A表 a

join (select XXX from B表)b on a.xx = b.xx

select * from sc where sid = (select sid from student where sname = '周梅')

select * from sc where sid in (select sid from student where sex='女')

select a.sname,b.score,c.score from student a

inner join (select sid,score from sc where cid =1) b on a.sid = b.sid

inner join (select sid,score from sc where cid = 2) c on a.sid = c.sid

where b.score › c.score

聚合函数对一组值执行计算,并返回单个值,也被称为组函数。

就是sql提供的一种查询方法,比如查询 最大值,最小值,总数,平均等等。

聚合函数不能写在where的查询条件里面

查询 最小值

select min(字段) from 表;

查询 最大值

select max(字段) from 表;

select max(tid) from teacher

select min(tid) from teacher

select max(a.score) ,b.cname from sc a

inner join course b on a.cid=b.cid

where a.sid =(select sid from student where sname='周梅') group by b.cname limit 1

查询 该字段的 总数

select sum(字段) from 表

查询 该字段的 平均数

select avg(字段) from 表

select avg(score) from sc

select avg(s.score) from student a inner join sc s on a.sid = s.sid

where a.sex ='女'

查询 数据 总条数

count( ) 是查询总共有多少条数据

count(字段) 是查询该字段 不为 null的 总共有多少条数据

例:

select count( ) from 表

去重,查询数据时,相同的数据只展示 一条

语法:

select distinct 字段 from 表

例:去重查询学生表中的生日字段

select distinct birthday from student

count 是用于统计查询结果的个数,属于聚合函数。

可以通过以下方面进行了解:

利用临时表进行测试

with tb as 

    select 1 n from dual union all

    select 1 n from dual union all

    select null n from dual union all

    select 2 n from dual union all    

    select 3 n from dual

)

1, 获取查询结果总行数

select count(*) from tb -- 5

由tb数据可见,tb中共有5条数据。

2,查询非null字段的行数

select count(n) from tb -- 4

该语句查询字段n不为null的总数量,由tb可见,n有一行为null,所以结果为4.

需要注意,若n为非null字段,查询总数时,使用count(*) 比 count(n)速度要快。

原因是count(字段)在统计时,若字段为null,计数不加。若字段不是null,计数+1.

3, 统计非空字段的非重复的内容数量

select count(distinct n) from tb -- 3

由于count(n)为获取非null字段数量。distinct为去掉重复值。所以,此结果为先去掉n的重复值再统计。

4,计算字段的非重复数量

select count(distinct nvl(n, 4) from tb -- 5

先提供null值为一个n中不存在的值,然后去掉重复值进行统计。

效果等同于

select count(distinct n)+1 from tb


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10701313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存