关于group by 和having(数据库)
2009-05-30 17:47
387 查看
在介绍GROUP BY 和 H***ING 子句前,先说说sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, ***G等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。
这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。
通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。
H***ING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是作用在GROUP BY 子句和H***ING子句前.
而 H***ING子句在聚合后对组记录进行筛选。
需要注意的是:group by会把该组同名的数据合并输出。看下表(checks):
CHECKNUM PAYEE AMOUNT REMARKS
1 Ma Bell 150 Have sons next time
2 Reading R.R . 245.34 train to Chicago
3 Ma Bell 200.33 Cellular Phone
16 Cash 25 Wild Night Out
17 Joans Gas 25.1 Gas
8 Cash 60 Trip to Boston
21 Cash 34 Trip to Dayton
25 Joans Gas 15.75 Gas
>SELECT PAYEE, SUM(AMOUNT), COUNT (PAYEE) FROM CHECKS
>GROUP BY PAYEE;
执行后结果为:
PAYEE SUM COUNT
Ma Bell 350.34 2
Reading R.R . 245.34 1
Cash 119 3
Joans Gas 40.85 2
但是:当我们对多个列进行分组时,例如执行:
>SELECT PAYEE, SUM(AMOUNT), COUNT (PAYEE) FROM CHECKS
>GROUP BY PAYEE,REMARKS;
结果又不一样,将不被合并输出,因为在REMARKS列中记录不同,不能被合并。
SELECT SUM(population) FROM bbc |
通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。
H***ING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是作用在GROUP BY 子句和H***ING子句前.
而 H***ING子句在聚合后对组记录进行筛选。
需要注意的是:group by会把该组同名的数据合并输出。看下表(checks):
CHECKNUM PAYEE AMOUNT REMARKS
1 Ma Bell 150 Have sons next time
2 Reading R.R . 245.34 train to Chicago
3 Ma Bell 200.33 Cellular Phone
16 Cash 25 Wild Night Out
17 Joans Gas 25.1 Gas
8 Cash 60 Trip to Boston
21 Cash 34 Trip to Dayton
25 Joans Gas 15.75 Gas
>SELECT PAYEE, SUM(AMOUNT), COUNT (PAYEE) FROM CHECKS
>GROUP BY PAYEE;
执行后结果为:
PAYEE SUM COUNT
Ma Bell 350.34 2
Reading R.R . 245.34 1
Cash 119 3
Joans Gas 40.85 2
但是:当我们对多个列进行分组时,例如执行:
>SELECT PAYEE, SUM(AMOUNT), COUNT (PAYEE) FROM CHECKS
>GROUP BY PAYEE,REMARKS;
结果又不一样,将不被合并输出,因为在REMARKS列中记录不同,不能被合并。
相关文章推荐
- 关于having,group by 的Sql 语句
- Oracle数据库-where, group by, having, order by语句的执行顺序
- 关于sql的UNION ,order by 、group by 、having等的用法
- 数据库中group by和having语法使用详解
- 数据库知识点---group by 和 having 和 order by
- 关于having 1=1 和group by 爆表的思考和总结
- 数据库关于group by 两个或以上条件的分析
- 关于mysql中 group by , order by , where, having 语句的区别与运用
- 数据库关于group by 两个或以上条件的分析
- 关于oracle中的group by、having以及order by
- 关于sql 中 group by 和 having
- 数据库中group by和having语法使用详解
- 数据库中Having放在分组函数group by后过滤查询组
- 数据库:关于group by 两个或以上条件的分析
- (转载)关于having 1=1 和group by 爆表的思考和总结
- 数据库where,group by,having使用原理分析
- 关于group by 、group by having、where group by与 group by order by
- 关于oracle中的group by、having以及order by
- 数据库关于group by 两个或以上条件的分析
- 数据库-SQL语法:GROUP BY与HAVING