sql - 如何在 Oracle SQL 中选择五个畅销产品?
问题描述
例如: 5. 编写一个 SELECT 语句,使用您在练习 4 中创建的视图来获取五种最畅销产品的总销售额。
SELECT TOP 5 Product_Name, Order_Total
FROM Product_Summary
ORDER BY Order_Total DESC
我收到此错误:
命令行错误:2 列:12
错误报告 -
SQL 错误:ORA-00923:在预期
的位置找不到 FROM 关键字 00923。00000 -“在预期的位置找不到 FROM 关键字”
*原因:
*操作:
请我一直在尝试解决这个问题,但我不知道如何解决它。
解决方案
您没有提到您使用的 Oracle 数据库版本;最终的“答案”取决于它,因为并非所有版本都支持我们答案中提供的所有功能。
这是适用于 Oracle 11g 及更高版本的一个。
我没有你的桌子,但是 - 同样,在 Scott 的桌子上EMP
。查看 3 个分析函数(以及ROWNUM
伪列)返回什么:
SQL> select ename, sal,
2 rownum row_num,
3 rnk_1,
4 rnk_2,
5 rnk_3
6 from (select ename,
7 sal,
8 row_number() over (order by sal desc) rnk_1,
9 rank() over (order by sal desc) rnk_2,
10 dense_rank() over (order by sal desc) rnk_3
11 from emp
12 order by sal desc
13 )
14 order by sal desc;
ENAME SAL ROW_NUM RNK_1 RNK_2 RNK_3
---------- ---------- ---------- ---------- ---------- ----------
KING 10000 1 1 1 1
FORD 3000 2 2 2 2
SCOTT 3000 3 3 2 2
JONES 2975 4 4 4 3
BLAKE 2850 5 5 5 4
CLARK 2450 6 6 6 5
ALLEN 1600 7 7 7 6
TURNER 1500 8 8 8 7
MILLER 1300 9 9 9 8
WARD 1250 10 10 10 9
MARTIN 1250 11 11 10 9
ADAMS 1100 12 12 12 10
JAMES 950 13 13 13 11
SMITH 920 14 14 14 12
14 rows selected.
SQL>
注意RNK_3
哪个需要注意关系(两个或多个员工具有相同的薪水)。一旦确定哪个版本最适合您的需求,请执行以下操作:
SQL> select ename,
2 sal,
3 rnk_3
4 from (select ename,
5 sal,
6 dense_rank() over (order by sal desc) rnk_3
7 from emp
8 )
9 where rnk_3 <= 5
10 order by rnk_3;
ENAME SAL RNK_3
---------- ---------- ----------
KING 10000 1
SCOTT 3000 2
FORD 3000 2
JONES 2975 3
BLAKE 2850 4
CLARK 2450 5
6 rows selected.
SQL>
在你的情况下,那将是
select product_name,
order_total,
rnk
from (select product_name,
order_total,
dense_rank() over (order by order_total desc) rnk
from product_summary
)
where rnk <= 5
order by order_total desc;
推荐阅读
- hadoop - 如何删除配置单元表上重复次数少于 20 的列
- python-3.x - 如何在 tkinter 单选按钮中获取/打印当前值
- javascript - react, wepack, babel, node, npm start 错误
- ocaml - OCaml :: 从控制台读取整数列表并打印回来
- oracle - SP2-0640:未连接
- cordova - 如何检测iTunes商店登录取消(应用购买中的cordova)?
- node.js - 加密敏感信息
- abap - UI5 Odata 批量更新 - 将返回消息连接到单个操作
- javascript - 将 HTML 标记内容传递给 PHP 变量
- python - 使用动态形状广播 tf.matmul