如何查找至少两列并按结果排序?

时间:2014-06-26 04:01:36

标签: sql oracle

我想找到至少两列。我做了以下......

select sname, least(nvl(m1,9999999),nvl(m2,9999999)) as "Least mark" from student;

但是现在,我想按Least mark订购结果,但我做不了..

select sname, least(nvl(m1,9999999),nvl(m2,9999999)) as "Least_mark" from student order by Least_mark;

因为表中没有名为Least_mark的列。

2 个答案:

答案 0 :(得分:1)

您可以使用子查询:

select s.*
from (select sname, least(nvl(m1,9999999),nvl(m2,9999999)) as Least_mark
      from student
     ) s
order by Least_mark;

答案 1 :(得分:0)

您可以在order by子句中使用列别名,但是因为您已经使用了别名的引用标识符,您必须始终在所有地方使用 - 引用且具有完全相同的大小写:

select sname, least(nvl(m1,9999999),nvl(m2,9999999)) as "Least mark"
from student
order by "Least mark";

SQL Fiddle demo

你也可以使用位置表示法order by 2,但是这更有可能在将来引起你的问题 - 比如有人在选择列表中插入了另一列但忘记更改位置值以匹配。 / p>

值得注意的是,在查询的同一级别中,您无法在其他任何位置使用列别名(或位置表示法),如group by子句。要在group by中使用它,你必须使用子查询,正如戈登所展示的那样。如果你只需要订购,那就没有必要了。