数据库--DQL语句,聚合函数,分组查询,排序查询

本文详细介绍了SQL中分组查询的使用,包括配合聚合函数(如count、max、min、avg、sum)处理数据,以及where和HAVING的区别。同时涵盖了根据性别、年龄、工作地址等字段进行分组分析和排序的实际应用场景。
摘要由CSDN通过智能技术生成

通常呢,分组查询会配合聚合函数搭配使用
聚合函数:将一列数据作为一个整体,进行纵向计算。
常见的聚合函数:
count:功能是统计数量
max:求最大值
min:求最小值
avg:求平均值
sum:求和
注意:这些聚合函数作用都是用来求表中的某一列的。
聚合函数的语法:
select 聚合函数 from 表名;
接下来,我们使用聚合函数以及它的语法实现以下需求:
在这之前,给大家看看我创建的表格以供参考:
2,2,丁含斌,男,18,123456778787878787,长沙市,2027-02-01
3,3,常瑞祥,男,18,142434454635625365,长沙市,2027-03-01
4,4,王子就,男,18,124345434387473877,长沙市,2027-04-01
5,5,火车,男,18,687631673671376362,长沙市,2027-05-01
1,1,张文超,男,18,431224200501200393,长沙市,2027-01-01
6,6,贾先生,女,21,深圳,2028-01-01

需求一:统计企业与员工数量:
select count()from ts;
因为统计的是整张表格里的总人数,所以直接在()里填
.
当然了,也可以在()里填具体的字段,比如(id)。
在我的表格中,作用是一样的,因为我的表格中,每一个员工都有id,可以在()中添加你想查询的字段的员工数量,比如说,在()中添加idcard,这就代表着身份证号,但是我的表格中,有一个员工的idcard是NULL,所以数量就会有不同。
需求二:统计员工表中员工的平均年龄。
select avg(age)from ts;
这个没啥好解释的
需求三:统计企业员工的最小年龄:
select min(age)from ts;
如此简单
需求四:统计深圳地区员工的年龄之和:
select sum(age)from ts where workaddress=‘深圳’;
注意:所有的NULL值不参与计算。

我们直奔主题:分组查询的语法:
select 字段列表 from 表名[where 条件]GROUP BY 分组字段名[HAVING 分组后过滤条件];
where和having的区别:
1.执行时机不同:where是分组之前进行过滤,不满足where的条件的不会参与分组,而having是分组之后对结果进行过滤。
2.判断条件不同:where不能对聚合函数进行判断,而having可以。
我们可以根据具体的实例和需求来理解
需求一:根据员工性别分组,统计男性员工和女性员工的数量:
select count()from ts group by gender;
拆分来看其实i也没啥大不了的,就是聚合函数加group by分组函数。
如果按照上述语法,会导致出来两个数字,但是不知道是男是女,我们可以加一组语法
select gender,count(
)from ts group by gender;
在前面加一组最基础的查询语法,就可以展示出男女的人数。

需求二:根据性别分组,查看男员工和男女员工的平均年龄:
select gender,avg(age)from ts group by gender;
这样就可以查看男女的平均年龄,通过最基础的查询语法,可以查看到性别,这样可以清晰的看到不同的平均年龄。

需求三:查看年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址:
对于需求数量比较多的需求,我们可以先实现部分功能,再根据需求逐一添加语法:
像需求三,我的代码会有一个演化:
select from ts where age<45;
这是第一层,查出年龄在45以下的员工.
select workaddress,count(
)from ts where age<45 group by workaddress ;
这是第二层,我们已经可以查看到年龄在45岁以下的,并且根据工作地址分组的员工数量了。
最后一层,在分组的基础上再次进行过滤,此时,就需要使用having了
select workaddress,count()from ts where age<45 group by workaddress HAVING count()>=3;
这样就可以了。
值得注意的是:分组之后,查询的字段一般为聚合函数和分组字段,查询其他的字段是毫无意义的。

排序查询在日常的开发中是极其常见的,会涉及到一个新关键字ORDER BY
比如购物软件中的价格,销量升序降序。
语法形式:
select 字段列表 from 表名 ORDER BY 字段一 排序方式1,字段2 排序方式2.
大家也可以看得出来,排序查询支持多字段排序。
排序方式:
asc: 升序(默认是升序排序)
sesc:降序
直接上需求:
需求一:根据年龄对公司员工进行升序排序.
select * from ts order by age asc ;
很简单的一个语法。
需求二:根据入职时间,对员工进行降序排序
需求三:根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select * from ts order by age asc ,entrydate desc ;
这就是逗号的意义。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值