按顺序sql设置Order Of列

时间:2017-12-24 09:44:41

标签: sql rank

如果我有这样的表:

Id Rnk
1   1
1   1 
1   2
1   2

我希望安排这样的表格:

Id Rnk
1   1
1   2
1   1
1   2

我希望它能被修复,所以当我选择表格时,订单将是这样的。关于我该怎么做的任何帮助?

1 个答案:

答案 0 :(得分:0)

  

我希望它能被修复,所以当我选择表格时   会是这样的。

快速回答:无法完成。如果要按所需顺序获取行,则必须始终在查询中使用ORDER BY子句。

关于这一问题的一些相关问题和答案:

来自维基百科的引用:Order by

  

ORDER BY是对结果集中的行进行排序的唯一方法。没有   在这个子句中,关系数据库系统可以返回任何行   订购。如果需要订购,则必须提供ORDER BY   应用程序发送的SELECT语句。

维基百科的另一句话Relational database

  

关系模型指定关系的元组没有   特定的顺序并且元组反过来没有对它施加任何顺序   属性。

为了得到这个具体的顺序,你可以用这种方式使用row_number分析函数:

SELECT "Id", "Rnk"
FROM ( 
  SELECT t.*,
         row_number() over (partition by "Id", "Rnk" order by "Id", "Rnk") as rn
  FROM Table1 t
) x
ORDER BY "Id", rn

PostgreSQL的演示:http://dbfiddle.uk/?rdbms=postgres_10&fiddle=0b86522f37e927a86701e778006e8cad



大多数数据库现在都支持row_number,即使MySql在即将推出的版本中也具有此功能