ove*_*awn 3 postgresql sql-order-by
order byPostgresql 中子句的参数类型是什么?
我遇到了一个非常奇怪的行为(使用 Postgresql 9.5)。即,查询
select * from unnest(array[1,4,3,2]) as x order by 1;
Run Code Online (Sandbox Code Playgroud)
1,2,3,4按预期生产。然而查询
select * from unnest(array[1,4,3,2]) as x order by 1::int;
Run Code Online (Sandbox Code Playgroud)
产生1,4,3,2,这看起来很奇怪。同样,每当我1::int用任何函数(例如greatest(0,1))甚至case运算符替换时,结果都是无序的(与我所期望的相反)。
那么参数应该具有哪种类型order by,以及如何获得预期的行为?
这是预期的(并记录在案的)行为:
A
sort_expression也可以是输出列的列标签或编号
所以表达式:
order by 1
Run Code Online (Sandbox Code Playgroud)
按结果集的第一列排序(由 SQL 标准定义)
然而表达式:
order by 1::int
Run Code Online (Sandbox Code Playgroud)
按常量值排序1,它本质上与:
order by 'foo'
Run Code Online (Sandbox Code Playgroud)
通过对order by所有行使用常量值,它们具有相同的排序值,因此并未真正排序。
要按表达式排序,只需使用:
order by
case
when some_column = 'foo' then 1
when some_column = 'bar' then 2
else 3
end
Run Code Online (Sandbox Code Playgroud)
以上根据表达式的结果对结果进行排序case。
| 归档时间: |
|
| 查看次数: |
2372 次 |
| 最近记录: |