zoukankan      html  css  js  c++  java
  • 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;

    结果如下:

  • 相关阅读:
    POJ3666 Making the Grade[动态规划]
    vector内部的实现1
    win32概述
    stl概述
    C++概要简介
    类的常量成员
    模板
    c11标准
    异常处理
    pak文件的打包和解包
  • 原文地址:https://www.cnblogs.com/573734817pc/p/11579932.html
Copyright © 2011-2022 走看看