【问题标题】:MariaDB 10.1.44 number rows without row_number()MariaDB 10.1.44 没有 row_number() 的行数
【发布时间】:2021-04-23 09:10:24
【问题描述】:

我想这样做:

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 db2.*,
               (@rn := IF(@Id = Id, @rn + 1,
                          IF(@Id := Id, 1, 1)
                         )
               ) as num
            from (SELECT *
                  FROM DB 
                  ORDER BY Id DESC , score DESC, creationDate DESC
             ) db2 CROSS JOIN
             (SELECT @rn := 0, @Id := '') params

但结果不一样。我想要这个:

1 1.0
1 2.0
1 3.0
1 4.0
1 5.0
1 6.0
1 7.0
1 8.0
2 1.0
2 2.0
6 1.0
6 2.0
6 3.0
6 4.0
8 1.0
10 1.0
10 2.0
10 3.0
12 1.0
14 1.0 
15 1.0
16 1.0
16 2.0 
16 3.0
16 4.0

但我得到了:

6   1.0
1   1.0
1   2.0
1   4.0
1   3.0
1   5.0
1   6.0
1   1.0
2   2.0
2   1.0
1   7.0
8   1.0
6   2.0
10  1.0
10  1.0
10  1.0

所以问题是:对于 Id = 1,它似乎有效,但我得到了 2 次 1 作为 num。而对于其他 ID,比如 10,它根本不起作用......我不明白为什么

谢谢

【问题讨论】:

    标签: mysql sql mariadb


    【解决方案1】:

    原因是mariadb follows the standards,表示一个结果集是无序的,只要没有Limit。

    我不知道,为什么你不使用 row_number。但使用以下查询

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

    【讨论】:

    • 你好@nbk,我想使用 row_number() 但它仅在 Mariadb 10.2+ 中可用,我使用 MariaDB 10.1 ...非常感谢它的工作原理
    • @nbk 。 . .这很有趣。 MySQL(历史上)总是物化派生表,但在这样做时并没有忽略ORDER BY,这就是代码在 MySQL 中工作的原因。我没有意识到 MariaDB 的行为有所不同。
    【解决方案2】:

    为什么不简单

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 2021-04-06
      • 2018-10-18
      • 2020-04-09
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多