全部博文(2065)
分类: 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排序(对查询出来的东西做排序。已经做了分组了之后再排序)