中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
部落纪事: 一条关于求统计分组的最大值的sql
作者:未知 时间:2005-07-27 23:27 出处:CSDN 责编:chinaitpower
              摘要:部落纪事: 一条关于求统计分组的最大值的sql

日期:2005-6-16

群id:11233046 

问题描述:

在上面这个表中,我想要取出相同dept里time1加起来最高的那条记录
如果相同的dept中有两条记录相同则取两个出来

id   dept   name  time1 
1      aa      x1      3      
2      aa      x1     4      
3      aa      x1     5 
4      bb     x2     4      
5      bb     x3     5 
6      aa     x4      7 
7      aa     x4      5

8      aa    x5     3
9      aa    x6     4
10    bb    x9    3
11    bb   x10  10

结果:

dept name sumMax

aa      x1      12

aa       x4     12

bb      x10   10

解答:

//--在access中测试通过
create table tbl
(
 id char(10),
 dept char(10),
 name char(10),
 time1 integer
)

insert into tbl(id,dept,name,time1)  values('1' ,'aa' ,'x1 ' ,3
 )
insert into tbl(id,dept,name,time1)  values('2' ,'aa' ,'x1 ' ,4 )
insert into tbl(id,dept,name,time1)  values('3' ,'aa' ,'x1 ' ,5)
insert into tbl(id,dept,name,time1)  values('4' ,'bb' ,'x2 ' ,4
 )
insert into tbl(id,dept,name,time1)  values('5' ,'bb' ,'x3 ' ,5)
insert into tbl(id,dept,name,time1)  values('6' ,'aa' ,'x4 ' ,7)
insert into tbl(id,dept,name,time1)  values('7' ,'aa' ,'x4' ,5
 )
insert into tbl(id,dept,name,time1)  values('8' ,'aa' ,'x5' ,3 )
insert into tbl(id,dept,name,time1)  values('9' ,'aa' ,'x6' ,4 )
insert into tbl(id,dept,name,time1)  values('10','bb' ,'x9' ,3 )
insert into tbl(id,dept,name,time1)  values('11','bb' ,'x10' ,10)

select dept,name, sum(time1) As sumMax  from tbl TmpA
group by dept,name
having (  sum(time1) >= all (select sum(time1) from tbl where TmpA.dept = dept group by name)  )

简单评注:
在最初确定功能时候用的是一条比较冗臃拖沓的sql,其中充斥着几个临时表,之后发现其实只是求分组后的结果求最值而已。
于是着手修改。
在having 中进行 比较 是分组后的比较,这样子能够让 比较的次数降低很多,尤其是 纪录数很多 组数很少的情况
在分组的时候的效率已经由数据库保证了。已经是不能更改的。
修改之后的sql果然让人清爽。简单,对称,优美,高效。
实在忍不住将它记下来。


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有