MySQL:在视图中的排序表中获取行位置

时间:2011-07-12 21:26:55

标签: mysql sql

好的,我在思考如何描述这个问题时遇到了困难,但基本上我的观点看起来像这样:

CREATE VIEW `dbname`.`v_viewname` AS
select
idTable,
round(val1*(probability*.01),2) as probest,
from table

我想要做的是创建另一个字段(让我们称之为“排名”),它是按照降序排序的时候行的位置。首先,我创建了一个存储过程,它将生成一个表,该表执行此操作并将其转换为派生表,如下所示:

set @rownum := 0;

select * from (

select @rownum := @rownum+1 AS rank, idTable

from table order by (val1*probability) desc )

as derived_table;

所以问题是,我如何将这个派生表与我在视图中读取的表格连接起来?如果桌子是常规或我会使用的东西:

table join inner derived_table on table.idTable = derived_table.idTable;

但是因为这必须通过一个视图来完成,我甚至不知道如何获得派生表的加入。另外:如果这种方式不起作用或以任何方式效率低下,那么另一种方法是什么呢?

1 个答案:

答案 0 :(得分:1)

select tbl.*, @rownum := @rownum+1 AS rank
from (select
      idTable,
      round(val1*(probability*.01),2) as probest,
      from table
      order by probest desc) tbl
      ,(select @rownum := 0) init_vars