sql中group by的理解

在我们的日常工作中,写sql的时候,group by应该是每个程序员都会遇到的。

今天,我们来谈论一下关于group by 的相关理解。

针对group by 的例子,我们可以写成如下样子:

  select (1) from your_table where (2) group by (3) having (4)

下面我们来看一下1、2、3、4分别代表什么,应该怎么用?

首先,我们来看(3):

  (3)为group by的字段,字段的选择为:前面sql语句(select (1) from your_table where (2))锁查询出来的字段和聚合函数。

其次,来看(1):

  因为,我们再语句中用到了group by,所以,(1)中的列只能是group by 的列或聚合函数(avg,max,min... ...)

再来看(2):

  (2)中的限制条件是针对前面查询语句(select (1) from your_table)和一般where语句无异。

最后,我们来看(4):

  (4)是什么呢?其实(4)和where的作用是一样的,不同的是它(4)限制的范围为group by 的字段或聚合函数。

说了这么多,大家肯定还是有疑惑。

下面我们用一个实例来进行说明:

--创建表并插入数据: 


create table sc(

 

学号 char(3),

 

课程号 char(5),

 

primary key(学号,课程号),

 

成绩 int

 

);

--然后插入数据:

insert into sc values('103','3-245',86);

insert into sc values('105','3-245',75);

insert into sc values('109','3-245',68);

insert into sc values('103','3-105',92);

insert into sc values('105','3-105',88);

insert into sc values('109','3-105',76);

insert into sc values('101','3-105',64);

insert into sc values('107','3-105',91);

insert into sc values('108','3-105',78);

insert into sc values('101','6-166',85);

insert into sc values('107','6-166',79);

insert into sc values('108','6-166',81);

 

好了,现在我们有了表和数据,我们来完成一个实验吧!

实验:查询最低分大于70,且最高分小于90的学号列。

首先,我们应该考虑的是,我们是不是需要分组,针对这个实验,答案是肯定的。

那么,我们又应该以哪一个字段作为依据进行分组呢?分析过后,我们应该以学号作为分组。

最后,我们看到有两个比较关键的字眼“最低分”、“最高分”。那么我们是一定需要用到聚合函数的。

明白以上几个点后,我们就要编写sql语句了。

这个sql语句可以编写为:

select 学号,min(成绩)as 最低分,max(成绩)as 最高分 from sc group by 学号  having MIN(成绩) > 70 and MAX(成绩) < 90;

结果如下:

 

posted @ 2019-09-24 18:10  超超go  阅读(4137)  评论(0编辑  收藏  举报