语法错误,试图从数据库返回行号

问题描述 投票:3回答:1
SELECT ROW_NUMBER()OVER(ORDER BY id), x, y, id
FROM coordonnees
ORDER BY id

我正在尝试返回每一行的行号(具有三列的名为coordonnees的表:idxy,但此代码不起作用

错误是:

[(ORDER BY id),x,y,id附近的语法错误

在数据库上:MYSQL 5.7.9

mysql sql window-functions row-number
1个回答
1
投票

显然,MySQL 5.7不支持ROW_NUMBER()。但是,我找到了一种新颖的解决方案,可以在this site上模拟它。

SELECT  @row_num := IF(@prev_value=c.id,@row_num+1,1) AS RowNumber
       ,c.x
       ,c.y
       ,c.id
       ,@prev_value := c.id
FROM coordonnees c,
    (SELECT @row_num := 1) x,
    (SELECT @prev_value := -1) y
ORDER BY c.id

尽管有一些注意事项:

  • @row_num变量必须在@prev_value变量之前设置。
  • ORDER BY中的第一个字段必须是您作为分区依据的字段。
  • 分配给@prev_value变量的默认值在分区字段中不得存在。
© www.soinside.com 2019 - 2024. All rights reserved.