添加马甲

请在下面输入您的马甲帐号信息, 然后点击 "添加" 按钮. 马甲信息添加后不能修改, 如果您修改了马甲的密码或安全提问, 请删除这个马甲并重新添加.
注意,每添加一个马甲收取工本费 200 金钱

用户名
密码
 
安全提问
回答
 
附加设置  
 



标题: [转载] sql group by 用法
闭上眼睛
秀才
Rank: 2


UID 1276
精华 0
积分 1643
帖子 410
威望 37
金钱 739
贡献 0
阅读权限 20
注册 2011-4-1
状态 离线
楼主
发表于 2011-8-4 04:08 资料 短消息 加为好友
分享到:

sql group by 用法

  groupby主要是用来分组的,怎么个分组呢?

  以下用两个例子说明两个使用方面,1是合理的返回合计值(防止笛卡尔积现象),2是用分组来找出重复的记录

  ====================================================================

  ★★★例子1:假如有这么一个表:tab_1,它有两个字段:xm、gzlb、je(姓名、工资类别、金额),具体数据如下:

  xm```````gzlb`````````je

  -----------------------------------------

  张三`````养老金`````1000

  张三`````护理费`````200

  张三`````其他```````50

  .............

  李四`````养老金`````800

  李四`````其他```````50

  .............

  王五`````养老金`````900

  王五`````其他```````35

  可以看出每个人的工资都是按类别存放的,如果要返回合计的数据,如:

  张三``````1250

  李四``````850

  王五``````935

  该怎么写SQL呢?初学者往往会这么写:selectxm,sum(je)fromtab_1;但结果会是什么样呢?结果将是:

  张三``````1250

  张三``````850

  张三``````935

  李四``````1250

  李四``````850

  李四``````935

  王五``````1250

  王五``````850

  王五``````935

  这是将全部字段都进行了所有的排列组合,即:笛卡尔积!要防止这个情况的发生,我们就可以用到groupby(分组)了!

  selectxm,sum(je)

  fromtab_1

  groupbyxm;

  上面的SQL指定了用xm字段分组,这样一来就返回出正确的结果了:

  张三``````1250

  李四``````850

  王五``````935

  ====================================================================

  ★★★例子2:假设又有这么一个表:tab_2,有这些字段:bh,xm,dah,……(编号、姓名、档案号、……),

  比如有这样的情况:向该表录入数据的人员非常不认真,重复录入了不少数据,如:

  bh``````xm```````dah

  ------------------------

  1```````张三`````10001

  2```````李四`````10002

  3```````王五`````10003

  ………………

  84``````张三`````10001

  85``````赵六`````10004

  ………………

  126`````王五`````10003

  可以看出张三、王五各重复了一次,假设这个表有几万条数据,那么要查出究竟有多少重复的,该怎么查呢?

  selectbh,xm,dah

  fromtab_2

  groupbyxm,sfzh

  havingcount(*)>=2;

  返回值为:

  bh``````xm```````dah

  ------------------------

  1```````张三`````10001

  84``````张三`````10001

  3```````王五`````10003

  126`````王五`````10003

  解释一下刚才的SQL:是从tab_2表中检索编号、姓名、档案号,怎么检索呢?是用姓名、档案号做为分组,分组的条件是记录数大于等于2的。

  这个比喻很形象:havingcount()语句相对于groupby语句,就相当于where语句相对于select语句

  ====================================================================

  所以,groupby这个分组语句是非常有用的一个好东西,还是那句话:善于使用它将会为你的工作带来极大的便利,而且能够制作出非常科学高效的报表!(来源:网络)

顶部
acidhuang
秀才
Rank: 2



UID 1393
精华 0
积分 2710
帖子 236
威望 0
金钱 124
贡献 0
阅读权限 20
注册 2011-9-16
状态 离线
发表于 2011-11-25 10:07 资料 短消息 加为好友
好人一个  

顶部
酸杏儿
举人
Rank: 3Rank: 3


UID 1109
精华 0
积分 3143
帖子 692
威望 175
金钱 1521
贡献 0
阅读权限 20
注册 2009-2-1
状态 离线
谢谢分享了!  

顶部
厂长 (选育)
秀才
Rank: 2


UID 1006
精华 0
积分 2974
帖子 246
威望 0
金钱 268
贡献 0
阅读权限 20
注册 2008-10-26
状态 离线
楼主,支持!  

顶部
牧羊老九 (羊老)
秀才
Rank: 2


UID 382
精华 0
积分 3001
帖子 234
威望 0
金钱 407
贡献 0
阅读权限 20
注册 2007-12-12
状态 离线
呵呵,找个机会...  

顶部
小懒猫
秀才
Rank: 2



UID 462
精华 0
积分 2898
帖子 240
威望 1
金钱 486
贡献 0
阅读权限 20
注册 2008-3-10
状态 离线
看看..  

顶部
灸疗养生馆
秀才
Rank: 2



UID 1435
精华 0
积分 2459
帖子 229
威望 0
金钱 178
贡献 2
阅读权限 20
注册 2011-12-8
来自 甘肃会宁县城
状态 离线
好啊,,不错、、、、  

顶部
zjy1053
秀才
Rank: 2



UID 495
精华 0
积分 2994
帖子 261
威望 0
金钱 123
贡献 0
阅读权限 20
注册 2008-4-15
来自 兰州
状态 离线
帮你顶,人还是厚道点好  

顶部
浪浪
秀才
Rank: 2



UID 3056
精华 0
积分 1686
帖子 139
威望 0
金钱 147
贡献 0
阅读权限 20
注册 2013-6-2
状态 离线
不错,支持下  

顶部
路上看见你
秀才
Rank: 2



UID 2028
精华 0
积分 459
帖子 118
威望 0
金钱 1
贡献 0
阅读权限 20
注册 2013-6-2
状态 离线
加油啊!!!!顶哦!!!!!  

顶部



京ICP备07018629号
本站QQ群69392608

当前时区 GMT+8, 现在时间是 2025-5-11 22:40

免责声明:本站部分文章、资源来自互联网,版权归原作者所有。如侵犯了您的权利,请及时告知,我们将于第一时间删除!

Powered by Discuz! © 2001-2024XML
Processed in 0.059786 second(s), 7 queries , Gzip enabled

清除 Cookies - 联系站长 - 精简版 - 手机版