Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29336744
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Mysql/postgreSQL

2010-03-11 12:37:00

SQL语句学习整理

一、整理group by 语句

group by
分组
通用数据库具有基于表的特定列对数据进行分析的能力。
可按照在 GROUP BY 子句中定义的组对行进行分组。以其最简单的形式,组由称为分组列的列组成。 SELECT 子句中的列名必须为分组列或列函数。列函数对于 GROUP BY 子句定义的每个组各返回一个结果。

PS:我的理解就是使用group by 就是对某个列进行统计数据。对某个组进行分组统计

如果使用了group 的语法的话那么在使用select 的时候这些字段必须为分组列或列函数

示例:

SELECT DEPT, MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT        
(对此列进行分组然后分析数据的功能)

 

使用where 条件过来

分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 WHERE 子句。必须在GROUP BY 子句之前指定 WHERE 子句。

PS:我的理解就是 where一下可以将结果集先做一下限制。即可以减少输出量。

然后在剩下的结果集里面再做一下分组即可!

注意:在 SELECT 语句中指定的每个列名也在 GROUP BY 子句中提到。未在这两个地方提到的列名将产生错误。

 

Group by 后面加上having 语句

可为应用限定条件进行分组,以便系统仅对满足条件的组返回结果。为此,在GROUP BY 子句后面包含一个 HAVING 子句。 HAVING 子句可包含一个或多个用 AND OR 连接的谓词。

 

PS:使用了having子句就表示 可以过滤掉某些组出来的。即只有符合条件的组才会被提取出来!而且在having子句中使用and or 关键字进来!

 

执行原理:

1、执行WHERE筛选数据

2、执行GROUP BY分组形成中间分组表

3、执行WITH ROLLUP/CUBE生成统计分析数据记录并加入中间分组表

4、执行HAVING筛选中间分组表(中间表筛选)

5、执行ORDER BY排序(对查询出来的东西做排序。已经做了分组了之后再排序)

 

 

阅读(829) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~