oracle按指定条件将结果显示在一行,如何在Oracle SQL中将结果限制为1行

在Oracle SQL中,限制查询结果为1行需要先进行排序再应用ROWNUM。例如,可以使用嵌套查询或结合窗口函数实现。示例查询包括使用ROWNUM配合子查询,或者使用DENSE_RANK()或ROW_NUMBER()窗口函数来获取最多订单的客户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本问题已经有最佳答案,请猛点这里访问。

我有一个成功运行的查询

SELECT customerNumber

FROM ORDERS

GROUP BY customerNumber

ORDER BY count(orderNumber) DESC

但是当我试图将返回的行数限制为1时,我会得到以下错误

ORA-00933: SQL command not properly ended

以下是我的尝试:

SELECT customerNumber

FROM ORDERS

GROUP BY customerNumber

ORDER BY count(orderNumber) DESC

fetch first 1 row only;

SELECT customerNumber

FROM ORDERS

GROUP BY customerNumber

ORDER BY count(orderNumber) DESC

WHERE ROWNUM=1;

fetch first 1 row only;Oracle需要12版,这是你用的吗?是你试图做出对找到的客户以最令???????

它的安在线编辑器的所以我不知道的版本,但我试图做出to find客户以最令。

在Oracle中,您需要先进行排序,然后选择rownum。因此,需要嵌套返回排序数据的查询,并将筛选WHERE子句带到外部。

SELECT * FROM

(

SELECT customerNumber

FROM ORDERS

GROUP BY customerNumber

ORDER BY count(orderNumber) DESC

) resultSet

WHERE ROWNUM=1;

谢谢!它也可以不使用resultSet。为什么需要这样做?

@Satwik噢,这是SQL Server中所必需的。我是通过反射添加的,因为我已经有一段时间没有和甲骨文合作了。对于这个查询,如果您使用的是Oracle,那么您可以将其取出。有关将别名添加到结果集中的原因的详细信息。

您可以组合分组和窗口函数来完成这一点。

select customernumber, num_orders

from (

SELECT customerNumber,

count(*) as num_orders,

dense_rank() over (order by count(*) desc) as rnk

from orders

group by customerNumber

) t

where rnk = 1;

与简单的"只给我一行"不同的是,这还将返回具有相同订单数的多个客户。如果您不想这样做,用row_number()替换dense_rank()

必须将where条件置于order by之前(但似乎排序完成后需要第一行)

所以你应该用一个选择这个wya

select * from (

SELECT customerNumber

FROM ORDERS

GROUP BY customerNumber

ORDER BY count(orderNumber) DESC

) t

WHERE ROWNUM=1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值