我有一个具有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;
如果在选择后发生排序依据,计数器的顺序如何不会受到影响?
答案 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}}));