【发布时间】:2015-02-10 13:35:50
【问题描述】:
我是 oracle sql 的新手。我正在尝试理解以下代码。谁能简单地解释一下 min(amt) 如何按 asc 顺序对结果进行排序?我认为 min() 返回一个值。为什么 max(amt) 给出完全相同的结果?按 min() 排序给出了我想要的结果,但试图了解它是如何做到的。
select (case when amt > 200 then '>200'
when amt > 100 then '>100'
else '>50'
end)
count(distinct orderno)
from xyz
where order_date between '...' and sysdate
group by (case when amt > 200 then '>200'
when amt > 100 then '>100'
else '>50'
end)
order by min(amt)
Result:
> 50
>100
>200
【问题讨论】:
-
你在那个查询中有一个 group by 子句,否则你应该得到
ORA-00937: not a single-group group function。如果不太长,请显示您的实际查询 - 或者提供一些我们可以调查的测试用例。 -
min(amt)在您指定的任何组中按amt的最小值排序。我认为您可能会将min和max与排序方向(asc和desc)混淆。
标签: sql oracle sql-order-by min