【发布时间】:2017-12-24 09:44:41
【问题描述】:
如果我有这样的表:
Id Rnk
1 1
1 1
1 2
1 2
我想这样安排桌子:
Id Rnk
1 1
1 2
1 1
1 2
我希望它被修复,所以当我选择表格时,顺序将是这样的。关于我该怎么做的任何帮助?
【问题讨论】:
-
没有默认的表格顺序。你总是需要定义一个
order by以获得保证的结果
如果我有这样的表:
Id Rnk
1 1
1 1
1 2
1 2
我想这样安排桌子:
Id Rnk
1 1
1 2
1 1
1 2
我希望它被修复,所以当我选择表格时,顺序将是这样的。关于我该怎么做的任何帮助?
【问题讨论】:
order by 以获得保证的结果
而且我希望它得到修复,这样每当我选择表的顺序时 会是这样的。
快速回答:无法完成。如果您想按所需顺序获取行,则必须始终在查询中使用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也会在下个版本中支持这个功能
【讨论】: