一文学懂 SQL group by子句 及 having子句

SQL group by 及 having 浅析

group by 子句

用来将结果进行分组,gruop by中提到的列(属性),其重复值会压缩为一组,对其可以使用聚集函数,在select子句中,出现的列只能是group by中的列,其余只能使用聚集函数

聚集函数

SQL中的聚集函数一共有5个,分别为:

min(column...)         # 求最小值
max(column...)         # 求最大值
sum(column...)         # 求和
count(column...)       # 求列数
avg(column...)         # 求平均值

having 子句

where用来对from子句选择的表经行过滤,having子句用来对聚集函数的结果进行过滤。

例子

# 测试
create database having_clause;
create table having_clause ( name varchar(20) not null, last_name varchar (20) not null, subject varchar(20) not null, result integer not null, primary key (name,last_name, subject));
insert into having_clause values ('Tom', 'Johnson', 'CyberSeurity' , 70);
insert into having_clause values ('Tom', 'Johnson', 'Data Base' , 85);
insert into having_clause values ('Tom', 'Johnson', 'System Intellectual' , 90);
insert into having_clause values ('Tom', 'Johnson', 'System' , 65);
insert into having_clause values ('Tom', 'Devis', 'CyberSeurity' , 69);
insert into having_clause values ('Tom', 'Devis', 'Data Base' , 50);
insert into having_clause values ('Tom', 'Devis', 'System Intellectual' , 80);
insert into having_clause values ('Tom', 'Devis', 'System' , 77);
insert into having_clause values ('Alice', 'Smit', 'Data Base' , 72);
insert into having_clause values ('Alice', 'Smit', 'System Intellectual' , 78);
insert into having_clause values ('Alice', 'Smit', 'System' , 80);
insert into having_clause values ('Bob', 'Jonnio', 'Data Base' , 90);
insert into having_clause values ('Bob', 'Jonnio', 'System Intellectual' , 83);
insert into having_clause values ('Bob', 'Jonnio', 'System' , 67);

group by 子句例子

  • 根据名称合并为组,显示成绩的总和
select name, last_name, sum(result) 
# name 和 last_name 在 group by 的列的集合中,这个地方选出是用于显示
from having_clause 
group by name,last_name;

请添加图片描述

  • 根据名称合并为组,显示成绩的最大值
select name, max(result) 
# name 在 group by 的列的集合中,这个地方选出是用于显示,只显示name的列,因为
# 有重复的名称,因此结果中也有重复的名称
from having_clause 
group by name,last_name;

请添加图片描述

  • 根据科目合并为组,显示成绩的最大值
select subject, max(result)
# subject 在group by的列的集合中,并且呈现到结果中
from having_clause 
group by subject;

请添加图片描述

having 子句例子

可以对聚集函数使用别名,然后使用having语句过滤结果。

select name, last_name, sum(result) as result_total
# name 和 last_name 在 group by 的列的集合中,这个地方选出是用于显示
from having_clause 
group by name,last_name
having result_total >270;

请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoseZang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值