我想找到至少两列。我做了以下......
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
的列。
答案 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";
你也可以使用位置表示法order by 2
,但是这更有可能在将来引起你的问题 - 比如有人在选择列表中插入了另一列但忘记更改位置值以匹配。 / p>
值得注意的是,在查询的同一级别中,您无法在其他任何位置使用列别名(或位置表示法),如group by
子句。要在group by
中使用它,你必须使用子查询,正如戈登所展示的那样。如果你只需要订购,那就没有必要了。