Sequelize 使用 ROW_NUMBER() 而不是 OFFSET 和 FETCH

Sequelize use ROW_NUMBER() instead of OFFSET and FETCH

我注意到使用 (offset, fetch) 和 rownumber 时的不同行为。

当我使用行号时 returns 我期望的结果。

所以我的 sequelize 查询如下所示:

 ClanModel.findAll({
    order: [["Wins", "DESC"]],
    offset: page * 5,
    limit: 5
 })

SQL 从第一行开始查询

SELECT 
    [clid] AS [ClanId], [Name], [Wins], [Losses], 
    [totalPoint] AS [TotalPoints] 
FROM 
    [Clan] AS [Clan] 
ORDER BY 
    [Clan].[Wins] DESC 
    OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY;

结果:

[ { Name: 'Test6'},
  { Name: 'Test5'},
  { Name: 'Test4'},
  { Name: 'Test3'},
  { Name: 'Test2'} ]

SQL查询第5个结果后:

SELECT 
    [clid] AS [ClanId], [Name], [Wins], [Losses],
    [totalPoint] AS [TotalPoints] 
FROM 
    [Clan] AS [Clan] 
ORDER BY 
    [Clan].[Wins] DESC 
    OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;

结果:

[ { Name: 'Test5'},
  { Name: 'Test4'},
  { Name: 'Test3'},
  { Name: 'Test2'},
  { Name: 'Test1'} ]

行号查询:

 SELECT 
     [Name], [Wins], [Losses], [TotalPoints] AS [TotalPoints]
 FROM 
     (SELECT
          [clid] AS [ClanId], [Name], [Wins], [Losses],
          [totalPoint] AS [TotalPoints], 
          ROW_NUMBER() OVER (ORDER BY [Wins]) AS RowNum
      FROM 
          [Clan]) as Clan
 WHERE 
     Clan.RowNum BETWEEN 5 AND 10

Returns我期望的结果:

Test5
Test6
Test7
Test8
Test9
Test10

我的数据库记录:

Test1
Test2
Test3
Test4
Test5
Test6
Test7
Test8
Test9
Test10

我想使用我的 sequelize 模型来获取我的数据,而不是使用普通的 sql 查询。但是我找不到在 sequelize 中使用行号的方法。

有没有办法仍然使用 sequelize 来获取我的数据?

您没有显示完整的数据。所以,这有点猜测:您在 wins 列中有联系。 order by 的排序不稳定,甚至不一致,这意味着平局可以以任何顺序返回。因此,通过包含名称来解决此问题:

SELECT [clid] AS [ClanId], [Name], [Wins], [Losses], [totalPoint] AS [TotalPoints]
FROM [Clan] AS [Clan]
ORDER BY [Clan].[Wins] DESC, Clan.Name
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;

假设Name是唯一的,这将使排序保持一致。如果这在 SQL 中有效,那么在 sequelize 中应该很容易实现。