请教查询方法 
有a,b,c,d,e和f六张表。表结构完全相同(比如包括姓名name,所学科目subject,和分数grade)。要查询这六张表里总分最高的前10名学生(注意不是每张表的前10名,是合到一起算)。没张表都比较大。应该如何查询??
我的想法是先在6张表上建视图,然后在视图上查询。前10名。但可能速度会比较慢。
create or replace
view data_view
as select * from a union
select * from b union
select * from c union
select * from d union 
select * from e union
select * from f union;
然后(这里加上limit后分组就不好使了,不知道为什么)
select sum(grade)
from data_view
group by name
order by grade desc
limit 10;
请问还有什么办法?查询速度能比较快。

解决方案 »

  1.   

    select top 10 aa from (select sum(grade) aa from a union
    select sum(grade) aa from b union
    select sum(grade) aa from c union
    select sum(grade) aa from d union 
    select sum(grade) aa from e union
    select sum(grade) aa from f) order by aa desc
      

  2.   

    楼上的好像不对吧。你这样把a表整个grade列求和了
      

  3.   

    yangxiao_jiang(哈哈) 的方法可取。
      

  4.   

    计算一下最高分:
    select max(grade) from a;
    select max(grade) from b;
    select max(grade) from c;
    ............
    筛选出比较高的分,该方法依据的是80/20规则select grade from a where grade > 90;
    select grade from b where grade > 90;
    select grade from c where grade > 90;
    ..........这样得到一个较少的数据集合。在进行联合