[英]Mysql @count:= @count + 1 update column based on the sort order of another query
I have a table with 2 columns alias (all are lower case) and ordering 我有一个带有2列别名的表(都为小写)和排序
how can I set numbers 0 to x based on column alias in alphabetical order ? 如何根据列别名按字母顺序将数字0设置为x?
update column based on the sort order of another query (select mytable order by alias )? 根据另一个查询的排序顺序更新列(通过别名选择mytable顺序)?
to get
alias | ordering
abf-ergterw | 0
crdsv-dfgdfg | 2
bggg-rgewrdg | 1
dxgg-rgewrdg | 3
something like 就像是
SET @count = 0;
UPDATE mytable SET ordering = @count:= @count + 1;
but based on column alias a = 1, b= 2, c = 3, .... 但基于列别名 a = 1,b = 2,c = 3,...。
thank you 谢谢
You could use ROW_NUMBER
: 您可以使用
ROW_NUMBER
:
SELECT *, ROW_NUMBER() OVER(ORDER BY alias ASC) - 1 AS ordering
FROM tab
ORDER BY ordering;
And UPDATE
: 和
UPDATE
:
UPDATE tab a
JOIN (
SELECT *, ROW_NUMBER() OVER(ORDER BY alias ASC) - 1 AS ord
FROM tab
) b ON a.alias = b.alias
SET a.ordering = b.ord
;
You can use the ORDER BY clause in an UPDATE statement: 您可以在UPDATE语句中使用ORDER BY子句:
SET @count = -1;
UPDATE mytable
SET ordering = @count:= @count + 1
ORDER BY alias ASC;
Demo: http://sqlfiddle.com/#!9/34e664/1 演示: http : //sqlfiddle.com/#!9/34e664/1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.