通过单个查询,我希望能够在数据库表中找到一行,并根据在订购另一列时所处的位置来生成一个虚拟列,该虚拟列表示该列的“等级”。 >
假设我在mySQL DB中有此表:
id | score 1 | 400 2 | 700 3 | 200 4 | 800
现在,我想查找ID为3的行,并找出该行在得分方面的排名。
显然,在表中,如果从最高得分到最低得分分配了等级,则第3行的等级为4,因为它在表的4行中得分最低。 在这种情况下,我不想findAll
进行排序,因为我的真实表非常大。
Model.findOne({
attributes: [
'id',
'score',
sequelize.literal('RANK() OVER (ORDER BY score DESC) rank')
]
});
这给了我这个错误:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(ORDER BY score DESC) rank FROM `Model` AS `Model` LIMIT 1' at line 1",
我非常感谢任何解决方案/建议!
编辑:版本-mySQL 5.6,sequelize 4.35.2
问题是通过单个查询,我希望能够在数据库表中找到一行,并根据...出现时的位置生成一个虚拟列,该虚拟列表示该列的“等级”] >
您的意思是这样的吗:
SELECT * FROM (
SELECT id, score, rank from
(
SELECT id, score, @tmprank := @tmprank + 1 AS rank
FROM scores
CROSS JOIN (SELECT @tmprank := 0) init
ORDER BY score DESC
) rt
ORDER BY rank
) AS r
WHERE r.id = 3;