开发者学堂课程【嵌入式之 RFID 开发与应用2020版:SQLite 中的分组操作】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/665/detail/11230
SQLite 中的分组操作
内容介绍:
一、数据分组 group by
二、过滤分组 having
一、数据分组 group by
分组数据,以便能汇总表内容的子集,常和聚集函数搭配使用。例如查询每个班级中的人数、平均分
使用: select 列名1[,列名2,...] from 表名 group by 列名
在终端下输入(先增加一列班名 class):
/目前表内容如下:
sqlite> select*from tbl;
id name addr score
---- -------- ------- ------
101 zs bj 40
102 ls tj 40
103 ww sh 60
104 zs cd 60
105 sw cq 90
106 xh hb 90
/通过 alter 加入一列班名 class
sqlite= alter table tbl add class text;
sqlitea select *from tbl;
id name addr score class
---- -------- ------- ------
101 zs bj 40
102 ls tj 40
103 ww sh 60
104 zs cd 60
105 sw cq 90
106 xh hb 90
/通过 update 编写班级
sqlite>update tbl set class='class_A' where name='zs ';
sqlite> update tbl set class='class_A' where name='ls ';
sqlite> update tbl set class='class_A' where name='ww ';
sqlite> update tbl set class='class_B' where id=104;
sqlite> update tbl set class='class_B' where id=105;
sqlite> update tbl set class='class_B' where id=106;
sqlitea select *from tbl;
id name addr score class
---- -------- ------- ------ ----------
101 zs bj 40 class_A
102 ls tj 40 class_A
103 ww sh 60 class_A
104 zs cd 60 class_B
105 sw cq 90 class_B
106 xh hb 90 class_B
编写完班级之后进行分组操作,执行 count()操作
sqlite> select class,count(*) from tbl group by class;
class
count(*)
-------- --------
class_A
3
class_B
3
可以求班级的成绩的均值:
sqlite> select class,avg(score) from tbl group by class;
class
avg( score)
------- -------------
class_A
46.66666667
class_B
80.0
还可以求其中一个班的平均值,后面要跟上条件,注意,group要在where后面:
sqlite> select class,avg(score) from tbl where class='class_A' group by class;
class
avg( score)
------- -------------
class_A
46.66666667
除了 group by 分组操作外,还有一种分组——过滤分组
二、过滤分组 having
除了能用 group by 分组数据外,还可以包括哪些分组,排除哪些分组。
例如:查看班级平均分大于 90 的班级
通过 having 实现
语法: select 函数名(列名1)[,列名2,...] from 表名 group by 列名 having 函数名限制值
终端输入(查看班级平均分大于90的班级)
sqlite> select class, avg(score) from persons group by classhaving avg(score) >= 90 ;
class_B 95.0
根据表求平均值大于80的班级:
sqlite> select class,avg(score) from tbl group by class having avg(score)>=80;
class avg ( score)
------- -------------
class_B 80.0
sqlite> select class,avg(score) from tbl group by class having avg(score)<80;
class avg( score)
------- -------------
class_A 46.66666667
函数于分组都是便于我们进行检索,就是增删查改中的查