具有排名行的MySql视图

时间:2015-06-03 21:03:00

标签: mysql

我有一个名为" vw_season_score"使用以下查询返回此结果;

SELECT s.* FROM vw_season_one_score s

query1result

如果我将此添加到查询中,我会得到位置:

SELECT  @curRow := @curRow + 1 AS position, s.* FROM vw_season_one_score s
JOIN  (SELECT @curRow := 0) r

enter image description here

但是,如果我尝试使用以下查询创建视图...

CREATE VIEW vw_season_one_positions AS 

SELECT  @curRow := @curRow + 1 AS position, s.* FROM vw_season_one_score s
JOIN  (SELECT @curRow := 0) r;

我收到此错误:

Error Code: 1351. View's SELECT contains a variable or parameter

那么如何使用所包含的位置来创建此视图?

提前感谢您的帮助并花时间阅读本文。

1 个答案:

答案 0 :(得分:1)

假设排名是按分数顺序排列的(您没有包含订单),并假设两个具有相同分数的团队获得相同排名,并假设如果您有排名1, 2, 2, ..则会不是排名3,它会直接跳到4,你可以使用下面可能表现糟糕的查询,但会完成工作:

select *, 1 + (select count(score) from vw_season_one_score where t.score < score) as rank
  from vw_season_one_score t
  order by score desc;

您可以使用此查询作为视图的基础。

如果没有重复的分数,这将给你一个很好的1, 2, ..., n等级,没有重复。

demo here