请教查询方法
有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;
请问还有什么办法?查询速度能比较快。
有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;
请问还有什么办法?查询速度能比较快。
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
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;
..........这样得到一个较少的数据集合。在进行联合