SQL中的group by用法
2010-06-11 17:24
127 查看
GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用
以下用两个例子说明两个使用方面,1是合理的返回合计值(防止笛卡尔积现象),2是用分组来找出重复的记录
===================================例子1======================================
如下面所示
A B
1 abc
1 bcd
1 asdfg
select A,B from table group by A
你说这样查出来是什么结果,
A B
abc
1 bcd
asdfg
右边3条如何变成一条,所以需要用到聚合函数,比如
select A,count(B) 数量 from table group by A
这样的结果就是
A 数量
1 3
===================================例子2======================================
假设又有这么一个表:tab_2,有这些字段:bh, xm, dah,……(编号、姓名、档案号、……),
比如有这样的情况:向该表录入数据的人员非常不认真,重复录入了不少数据,如:
bh``````xm```````dah
------------------------
1```````张三`````10001
2```````李四`````10002
3```````王五`````10003
………………
84``````张三`````10001
85``````赵六`````10004
………………
126`````王五`````10003
可以看出张三、王五各重复了一次,假设这个表有几万条数据,那么要查出究竟有多少重复的,该怎么查呢?
select bh, xm, dah
from tab_2
group by xm, sfzh
having count(*) >= 2;
返回值为:
bh``````xm```````dah
------------------------
1```````张三`````10001
84``````张三`````10001
3```````王五`````10003
126`````王五`````10003
解释一下刚才的SQL:是从tab_2表中检索编号、姓名、档案号,怎么检索呢?是用姓名、档案号做为分组,分组的条件是记录数大于等于2的。
这个比喻很形象:having count()语句相对于group by语句,就相当于where语句相对于select语句
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面
以下用两个例子说明两个使用方面,1是合理的返回合计值(防止笛卡尔积现象),2是用分组来找出重复的记录
===================================例子1======================================
如下面所示
A B
1 abc
1 bcd
1 asdfg
select A,B from table group by A
你说这样查出来是什么结果,
A B
abc
1 bcd
asdfg
右边3条如何变成一条,所以需要用到聚合函数,比如
select A,count(B) 数量 from table group by A
这样的结果就是
A 数量
1 3
===================================例子2======================================
假设又有这么一个表:tab_2,有这些字段:bh, xm, dah,……(编号、姓名、档案号、……),
比如有这样的情况:向该表录入数据的人员非常不认真,重复录入了不少数据,如:
bh``````xm```````dah
------------------------
1```````张三`````10001
2```````李四`````10002
3```````王五`````10003
………………
84``````张三`````10001
85``````赵六`````10004
………………
126`````王五`````10003
可以看出张三、王五各重复了一次,假设这个表有几万条数据,那么要查出究竟有多少重复的,该怎么查呢?
select bh, xm, dah
from tab_2
group by xm, sfzh
having count(*) >= 2;
返回值为:
bh``````xm```````dah
------------------------
1```````张三`````10001
84``````张三`````10001
3```````王五`````10003
126`````王五`````10003
解释一下刚才的SQL:是从tab_2表中检索编号、姓名、档案号,怎么检索呢?是用姓名、档案号做为分组,分组的条件是记录数大于等于2的。
这个比喻很形象:having count()语句相对于group by语句,就相当于where语句相对于select语句
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面
相关文章推荐
- SQL 中order by 、group by 、having的用法区别
- sql中的 where 、group by 和 having 用法解析
- SQL中group by的用法
- sql中的group by 和 having 用法解析
- sql中的group by 和 having 用法解析
- sql中的group by 和 having 用法解析
- sql中的group by 和 having 用法解析
- 浅析SQL语句中GROUP BY的用法
- 深入浅析SQL中的group by 和 having 用法
- SQL中GROUP BY的用法
- count,group by,having(SQL)的用法
- sql中的group by 和 having 用法解析
- sql中的group by 和 having 用法解析
- SQL中GROUP BY的用法
- sql中的group by 和 having 用法解析
- SQL中的Where,Group By,Order By和Having的用法/区别
- sql语句中的group by用法
- sql中的group by 和 having 用法解析
- sql语句Group By用法
- sql中的group by 和 having 用法解析