繁体   English   中英

根据另一个列值的顺序为表中的所有行编号

[英]Number all rows in table based on order of another column value

我目前有一张含497k字的表格。 英语中的每个单词及其相对频率都是一行。 我想再做一列,根据其频率将它们从1到497k(此列表中的单词数)排序,最高频率为1,依此类推。 我怎样才能做到这一点? 我正在使用MySQL 5.1.54

我想出了这个(复杂,但可能很快)的单语句解决方案:

update vocabulary SET rank = 

(
SELECT ranking.rank FROM (
  SELECT @rownum:=@rownum + 1 as rank, voca.word
  FROM 
      (
        SELECT v.word, v.frequency
        FROM vocabulary v
        ORDER BY v.frequency DESC
      ) voca,
     (SELECT @rownum := 0) r
) ranking
WHERE ranking.word = vocabulary.word
);

我相信这可以进一步优化,但是这可能是一个很好的起点,可以为此制定一个陈述式的解决方案。

此外,这可能仍然存在用不同词但频率相同的行对行进行排序的问题。

这是一个SQL Fiddle: http ://sqlfiddle.com/#!2 / a00e2 / 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM