选择每个分支的最高余额,每个分支只有一个

时间:2018-03-17 18:20:23

标签: sql oracle

我有一个基于银行的数据库,每个分支都有一个唯一的分支ID。

我正在尝试创建一个查询,显示每个分支的储蓄帐户的最高余额。每个分支ID只显示一行。

我有这个查询显示储蓄账户的最高余额,但我无法弄清楚如何拥有这个唯一的每个分支ID。

select max(a.balance) as balance, b.bid, c.pname.firstname, c.pname.middleinitial, c.pname.lastname
from brancht b
join accountt a on b.bid=a.bid
join customeraccountt ca on ca.accnum = a.accnum
join customert c on c.custid = ca.custid
where acctype='Savings'
group by b.bid, c.pname.firstname, c.pname.middleinitial, c.pname.lastname
order by balance desc, b.bid
/

此查询的结果将返回:

BALANCE      BID   PNAME.FIRSTNAME    PNAME.MIDDLEINITIAL PNAME.LASTNAME 

14050        101   Kornelia           J                   Oconnor             
13000        101   Myra               D                   Johnson 
9850         105   Lucie              M                   Crosby              
9050         105   Simon              R                   Patrick

查询的另一部分是如果可以在同一个查询中显示它们的当前帐户(如果有的话)也会显示其透支限额?

希望这是足够的信息。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用ROW_NUMBER函数,如下所示。在子查询中,根据Branch分区的余额为每行分配ROW_NUMBER。具有特定分支的最大余额的行将被分配1,依此类推;然后你只过滤那些有row_number -1的记录;每个分支只有一个记录(最大余额),ROW_NUMBER = 1

select * from 
(select balance, b.bid, c.pname.firstname, c.pname.middleinitial, c.pname.lastname,
row_number() over (partion by b.bid order by balance desc) as rn
from brancht b
join accountt a on b.bid=a.bid
join customeraccountt ca on ca.accnum = a.accnum
join customert c on c.custid = ca.custid
where acctype='Savings'
group by b.bid, c.pname.firstname, c.pname.middleinitial, c.pname.lastname
) where rn=1