0

我想这样做:

SELECT * , ROW_NUMBER() OVER (PARTITION BY Id ORDER BY score DESC, creationDate DESC) as num
FROM DB
ORDER BY score DESC, creationDate DESC

但在 MariaDB 10.1 中,row_number 不可用。我设法做到了:

SELECT *, (@num:= @num + 1) AS num
from DB,
(SELECT @num:= 0 AS num1) AS c
order by score DESC, creationDate DESC

但我不知道如何放置分区,所以我可以为任何 Id 开始一个新的计数(最终目标是按创建的 num 排序)

谢谢

4

1 回答 1

0

您可以将其表示为:

SELECT db.*,
       (@rn := IF(@id = id, @rn + 1,
                  IF(@id := id, 1, 1)
                 )
       ) as num
from (SELECT db.*
      FROM DB
      ORDER BY id, score DESC, creationDate DESC
     ) db CROSS JOIN
     (SELECT @rn := 0, @id := '') params;

注意:这使用子查询在进行计算之前对行进行排序。这在最近的 8.0 之前的 MySQL 版本中是必需的。我不知道 MariaDB 是否真的需要它。

于 2021-04-14T13:29:56.193 回答