本问题已经有最佳答案,请猛点这里访问。
我有一个成功运行的查询
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;