当前位置: 代码迷 >> Sql Server >> 最大值查询,求解!解决方案
  详细解决方案

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

热度:95   发布时间:2016-04-27 19:12:39.0
最大值查询,求解!
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楼效率高.
  相关解决方案