首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

最大值查询,求解!解决方案

2012-01-14 
最大值查询,求解!TB AA1A2B1业务12B3业务14B1业务52B2业务16B1业务12B2业务82B2业务14需要查询列A1 某业务

最大值查询,求解!
TB A

A1 A2
B1业务 12
B3业务 14
B1业务 52
B2业务 16
B1业务 12
B2业务 82
B2业务 14


需要查询 列A1 某业务 的 最大值A2
结果如:
B3业务 14
B1业务 52
B2业务 82

[解决办法]

SQL code
select * from tb twhere A2=(select max(A2) from tb where A1=t.A1)
[解决办法]
SQL code
select A1,max(A2) 'maxA2'from TB group by A1
[解决办法]
SQL code
select A1,max(A2)from A group by A1
[解决办法]
探讨
1楼的效率,还是2楼的效率。执行

[解决办法]
性能一样,从扩展性来看,似乎1楼会好点,比如还有一列A3(INT),仍然按A1分组,就不能用以下语句了
select A1,max(A2) 'maxA2',max(A3) 'maxA3'
from TB 
group by A1

另附上我自己的一种写法
SQL code
SELECT A1,A2 FROM (SELECT A1,A2,ROW_NUMBER() OVER (PARTITION BY A1 ORDER BY A2 DESC) AS RowIndex FROM TBA) XWHERE RowIndex=1
[解决办法]
探讨

1楼的效率,还是2楼的效率。执行

[解决办法]
SQL code
use testgo-->>>苦苦的潜行者if object_id('tb') is not nulldrop table tbcreate table tb(A1 varchar(20),A2 int)insert tbselect 'B1业务',12  union allselect 'B3业务',14  union allselect 'B1业务',52  union allselect 'B2业务',16  union allselect 'B1业务',12  union allselect 'B2业务',82  union allselect 'B2业务',14  goselect A1,max(A2) as [最大量] from tbgroup by A1/*(所影响的行数为 3 行)A1    最大量-----  ----B1业务  52B2业务  82B3业务  14*/godrop table tb
[解决办法]
如果仅仅是两个字段分组求最大,则直接分组,使用max即可,所以2楼效率高.

热点排行
Bad Request.