oracle --group by
一,group by 语法规范
首先我们准备一张Student表
CREATE TABLE STUDENT
( SNO VARCHAR2(10) not null,
SNAME VARCHAR2(20),
SAGE NUMBER(2),
SSEX VARCHAR2(5) )
往里面插入几条学生实体记录。再查看数据:
SELECT * FROM STUDENT;
我们使用group by将这些数据按照性别进行分组:
SELECT * FROM STUDENT GROUP BY SSEX;
提示:不是 GROUP BY 表达式!
原因是group by 分组查询,select子句后的字段必须来自group by后的分组字段。于是 我们执行SQL
SELECT SSEX FROM STUDENT GROUP BY SSEX;
这下成功地将数据分为了两组。我们接下来使用下聚合函数
SELECT SSEX,MAX(SAGE) FROM STUDENT GROUP BY SSEX;
注意这条sql语句,select子句中聚合函数使用了SAGE(年龄)这个字段,那会不会违背了前面所说的 “select子句后的字段必须来自group by后的分组字段”这个规律呢,我们来执行一下:
能正常执行,成功地按照了性别分组,并且查询出了性别对应年龄最大的学生。于是我们可以得出规律:select子句后的任一非聚合函数字段都应来源于group by 分组语句后,否则语法会编译不通过。
二,group by 用法的意义
我们都知道group by 是用来分组的,那么具体怎么分组,对应的语句又怎么写呢?