为什么排序不影响增量计数器的顺序?

时间:2020-10-27 11:26:39

标签: mysql sql sql-order-by

我有一个具有1列Name的表NAMES。名称列包含bob,amy,chase。

当我在下面运行此查询时,它将以1-bob,2-amy,3-chase返回我期望的结果。

SET @x:=0;
SELECT @x:=@x+1, Name FROM NAMES;

当我在下面运行此查询时,我希望得到2-amy,1-bob,3-chase,但是相反,我会得到1-amy,2-bob,3-chase。

SET @x:=0;
SELECT @x:=@x+1, Name FROM NAMES ORDER BY Name;

如果在选择后发生排序依据,计数器的顺序如何不会受到影响?

1 个答案:

答案 0 :(得分:1)

首先,您的原始查询不稳定。在没有id子句的情况下,尚不确定如何对名称进行排名。我假设您需要一个订购专栏order by

然后:您将需要一个外部set @x:=0; select * from ( select @x:=@x+1 rn, name from (select name from names order by id) t; ) t order by name 来执行所需的操作。我还发现,在分配排名之前,先在子查询中进行排序更安全:

select *
from (
    select @x:=@x+1 rn, name 
    from (select name from names order by id) t
    cross join (select @x := 0) x
) t
order by name

请注意,您可以在同一查询中声明变量:

row_number()

最后:如果您运行的是MySQL 8.0,则使用select name, row_number() over(order by id) rn from names order by name 会更简单:

var percentage = (function() {
    return function(n,percent){
     return n*percent/100;
    };
    
})();
    
console.log(percentage(98, {{Ecommerce - Revenue}}));
相关问题