表T_TEST的结构式 name(名字) ,accountBank(开户银行),amt(余额)
现在数据如下name accountBank amt
A         农行   100
A         招行   30
A         农行   50
B         招行   1000
B         农行   30
B         招行   20
C         招行   500
D         工行   300
D         工行   600select name,accountBank,sum(amt) group by name,accountBank
现在按名字,银行账户分组汇总后,结果就是
A 农行 150
A 招行 30

B 招行 1020
B 农行 30C 招行 500D 工行 900现在希望这个结果集最总能按名称的总计来排序,就应该是这样的结果集B 招行 1020
B 农行 30     (B的合计是1050 最大)D 工行 900C 招行 500A 农行 150
A 招行 30这种查询在该咋写啊?

解决方案 »

  1.   

    加一个order by sum(amt)?
      

  2.   

    select a.name,accountBank,total from
    (select name,accountBank,sum(amt) total from t_test group by name,accountBank) a,
    (select name,sum(amt) ord from t_test group by name) b
    where a.name = b.name order by ord desc;
      

  3.   

    10:28:40 scott@TUNGKONG> select * from t_test;NAME       ACCOUNTBAN        AMT
    ---------- ---------- ----------
    A          农行              100
    A          招行               30
    A          农行               50
    B          招行             1000
    B          农行               30
    B          招行               20
    C          招行              500
    D          工行              300
    D          工行              600已选择9行。已用时间:  00: 00: 00.01
    10:28:44 scott@TUNGKONG> select a.name,accountBank,total from
    10:28:49   2  (select name,accountBank,sum(amt) total from t_test group by name,accountBank) a,
    10:28:49   3  (select name,sum(amt) ord from t_test group by name) b
    10:28:49   4  where a.name = b.name order by ord desc;NAME       ACCOUNTBAN      TOTAL
    ---------- ---------- ----------
    B          招行             1020
    B          农行               30
    D          工行              900
    C          招行              500
    A          农行              150
    A          招行               30已选择6行。已用时间:  00: 00: 00.01
      

  4.   

    排序的时候最好再加上 order by ord desc,total desc;
      

  5.   

    select name,accountBank,sum(amt) amt group by name,accountBank order by sum(amt),amt desc;
      

  6.   

    with temp as(
    select 'A' name,'农行' accountBank,100 amt from dual
    union all
    select 'A' name,'招行' accountBank,30 amt from dual
    union all
    select 'A' name,'农行' accountBank,50 amt from dual
    union all
    select 'B' name,'招行' accountBank,1000 amt from dual
    union all
    select 'B' name,'农行' accountBank,30 amt from dual
    union all
    select 'B' name,'招行' accountBank,20 amt from dual
    union all
    select 'C' name,'招行' accountBank,500 amt from dual
    union all
    select 'D' name,'工行' accountBank,300 amt from dual
    union all
    select 'D' name,'工行' accountBank,600 amt from dual
    )
    select a.name,a.accountBank,a.sumat from 
    (select name,accountBank,sum(amt) sumat from temp group by name,accountBank) a,
    (select name,sum(amt) sumamt from temp group by name) b
     where a.name = b.name order by sumamt desc