如果我有这样的表:
Id Rnk
1 1
1 1
1 2
1 2
我希望安排这样的表格:
Id Rnk
1 1
1 2
1 1
1 2
我希望它能被修复,所以当我选择表格时,订单将是这样的。关于我该怎么做的任何帮助?
答案 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在即将推出的版本中也具有此功能