第三最近元素pl/sql oracle
我想为以下模式编写一个PL/SQL函数:第三最近元素pl/sql oracle,oracle,function,plsql,Oracle,Function,Plsql,我想为以下模式编写一个PL/SQL函数: Parts (pid:integer, pname:string, year:integer, price:integer) Suppliers (sid:integer, sname: string, state:string, zipcode:string) Orders (pid:integer, sid:integer, quantity:integer) 该函数必须执行以下操作: PL/SQL函数,它将价格作为参数,并返回与给定价格第三接近的
Parts (pid:integer, pname:string, year:integer, price:integer)
Suppliers (sid:integer, sname: string, state:string, zipcode:string)
Orders (pid:integer, sid:integer, quantity:integer)
该函数必须执行以下操作:
PL/SQL函数,它将价格作为参数,并返回与给定价格第三接近的零件的pid。请注意,最近值可以是更高或更低。如果该属性有多个部件,请选择年份较高的部件。如果仍然存在平局,请选择pid最高的一个
到目前为止,我还没有这样做,但我不知道如何检测平局情况并对其进行处理:
CREATE OR REPLACE FUNCTION getThirdNearestPriceOfPart(price IN INTEGER)
RETURN Parts.pid%type
IS
third_pid Parts.pid%type;
BEGIN
SELECT P1.pid INTO third_pid
FROM Parts P1
WHERE (2) = (
SELECT COUNT(*) FROM Parts P2
WHERE P2.price > P1.price OR P2.price < P1.price);
RETURN third_pid;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN -1;
END;
请帮帮我
PL/SQL函数,它将价格作为参数,并返回与给定价格第三接近的零件的pid
我向您介绍了编写PL/SQL函数部分——但这里有一些编写SQL查询的指南:
首先,计算给定价格与每个零件价格之间的距离相当容易:ABSprice-参考价格
考虑到这一点,您现在可以使用ORDERBY子句按距离排序,然后按年份排序,然后按pid排序
然后可以使用ROWNUM对行进行编号
最后只保留第三排。系件已作为上一个ORDER BY子句的一部分进行处理。
诸如此类:
看这听起来很像家庭作业问题。您应该编辑您的问题并添加您尝试过的任何尝试。
SELECT * FROM (
SELECT ROWNUM RN, V.* FROM (
SELECT pid, ABS(price - 17.50) distance, price
FROM Parts
ORDER BY 2 asc, year desc, pid desc
) V
) V2
WHERE RN = 3