选择最高值而不使用max?

时间:2016-09-24 02:16:37

标签: sql oracle

我有2列。 CustNo和CustBal

尝试编写脚本以选择具有最高余额的CustNo。我尝试使用max,如果我只使用CustBal列,我可以使用它,但在这种情况下不能。我认为在CUSTBAL之后它可能是一个带有东西的WHERE项目吗?

SELECT CUSTNO, CUSTBAL
FROM CUSTOMER
WHERE CUSTBAL

3 个答案:

答案 0 :(得分:3)

或者:

select * from
(select custno, custbal from customer order by custbal desc)
where rownum = 1

..如果你有12c:

select custno, custbal from customer
order by custbal desc
fetch next 1 rows only

然而,即使有多个客户具有相同的最高余额,这些也只会返回一行。如果你想要所有最高级别的记录,那么:

select custno, custbal from
(select *, dense_rank() over (order by custbal desc) as rank from customer)
where rank = 1

答案 1 :(得分:1)

为什么不使用MAX?

您需要单独计算MAX,因为您只能在查询结束时执行此操作(使用SELECT子句中的聚合函数MAX),并且不能在一个查询中混合单个行和聚合。因此,您必须在子查询中计算MAX。

select custno, custbal
from   customer
where  custbal = (select max(custbal) from customer)
;

答案 2 :(得分:0)


嗨,尼基,你也可以使用简单的按功能分组,

SELECT CUSTNO, MAX(CUSTBAL)
    FROM CUSTOMER
      GROUP BY CUSTNO 
      ORDER BY CUSTNO

GROUP BY - 为您提供与CUSTNO相关的最大CUSTBAL ORDER BY - 以CUSTNO列的升序显示结果