Sequelize.js-根据列值查找行的等级

问题描述 投票:0回答:1

问题

通过单个查询,我希望能够在数据库表中找到一行,并根据在订购另一列时所处的位置来生成一个虚拟列,该虚拟列表示该列的“等级”。 >

假设我在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

问题是通过单个查询,我希望能够在数据库表中找到一行,并根据...出现时的位置生成一个虚拟列,该虚拟列表示该列的“等级”] >

mysql sequelize.js
1个回答
0
投票

您的意思是这样的吗:

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;
© www.soinside.com 2019 - 2024. All rights reserved.