如何在模型上运行 RANK() 函数

Mar*_*uch 2 sql-server sequelize.js

如何运行排名函数以在给定的续集模型上生成属性?

例如,给定模型:

Players.init(
  {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      allowNull: false
    },
    rating: type: DataTypes.FLOAT
  },
  { sequelize }
)
Run Code Online (Sandbox Code Playgroud)

我想rank在运行时获得一个属性Players.getAll({ rank: rating })。这将生成类似于以下内容的 SQL:

SELECT id, rating, RANK() OVER (ORDER BY rating DESC) as rank FROM players
Run Code Online (Sandbox Code Playgroud)

我将如何使用sequelize来做到这一点?

Roh*_*lal 5

您可以使用 Sequelize Literal Function,如下所示 -

attributes: [
          'id', 'rating',
          [Sequelize.literal('(RANK() OVER (ORDER BY rating DESC))'), 'rank']
    ]
Run Code Online (Sandbox Code Playgroud)

创建新属性。