具有排序行的MySql视图
我有一个名为vw_season_score的视图,它通过以下查询返回此结果具有排序行的MySql视图,mysql,Mysql,我有一个名为vw_season_score的视图,它通过以下查询返回此结果 SELECT s.* FROM vw_season_one_score s 如果我将其添加到查询中,我将获得以下职位: SELECT @curRow := @curRow + 1 AS position, s.* FROM vw_season_one_score s JOIN (SELECT @curRow := 0) r 但是,如果我尝试使用以下查询创建视图 CREATE VIEW vw_season_one_
SELECT s.* FROM vw_season_one_score s
如果我将其添加到查询中,我将获得以下职位:
SELECT @curRow := @curRow + 1 AS position, s.* FROM vw_season_one_score s
JOIN (SELECT @curRow := 0) r
但是,如果我尝试使用以下查询创建视图
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、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没有重复
我现在不能测试,但是如果你把它包装成创建视图,它会允许你创建视图吗。。。从选择@curRow:=@curRow+1…..中选择*。。。。。分?错误抱怨视图的SELECT有一个变量,但并不意味着它不能出现在任何地方。您好,Michael,这将在视图中生成一个子查询错误,这不是一个可行的选项。您不能在视图中使用变量:从:SELECT语句不能引用系统变量或用户定义的变量。确定,我们已经知道,通过错误代码输出,有没有关于如何实现这一点的建议?如果他们的分数相等,他们应该得到什么等级?视图中已经实现了order by子句,我忘了添加这些信息,然而,这是一个有趣的分析,你已经与并列的分数,使我认为,如果认为这是最好的方法,为这个案件,除此之外,你的答案完美地工作,谢谢!