gpt4 book ai didi

甲骨文分析问题

转载 作者:行者123 更新时间:2023-12-02 08:15:23 25 4
gpt4 key购买 nike

给定一个函数 zipdistance(zipfrom,zipto),它计算两个邮政编码之间的距离(以英里为单位),如下表:

create table zips_required(
zip varchar2(5)
);

create table zips_available(
zip varchar2(5),
locations number(100)
);

如何构造一个查询,该查询将返回 zips_required 表中的每个邮政编码以及产生总和(位置)>= n 的最小距离。

到目前为止,我们只是对每个半径运行了详尽的循环查询,直到满足条件为止。

--Do this over and over incrementing the radius until the minimum requirement is met
select count(locations)
from zips_required zr
left join zips_available za on (zipdistance(zr.zip,za.zip)< 2) -- Where 2 is the radius

对于一个大列表来说,这可能需要一段时间。感觉这可以通过 Oracle 分析查询来完成,如下所示:

min() over (
partition by zips_required.zip
order by zipdistance( zips_required.zip, zips_available.zip)
--range stuff here?
)

我所做的唯一分析查询是基于“row_number over(按顺序分区)”的,并且我正在涉足未知领域。非常感谢对此的任何指导。

最佳答案

这就是我的想法:

SELECT zr, min_distance
FROM (SELECT zr, min_distance, cnt,
row_number() over(PARTITION BY zr ORDER BY min_distance) rnk
FROM (SELECT zr.zip zr, zipdistance(zr.zip, za.zip) min_distance,
COUNT(za.locations) over(
PARTITION BY zr.zip
ORDER BY zipdistance(zr.zip, za.zip)
) cnt
FROM zips_required zr
CROSS JOIN zips_available za)
WHERE cnt >= :N)
WHERE rnk = 1
  1. 对于每个 zip_required 计算到 zip_available 的距离,并按距离排序
  2. 对于每个 zip_required,带有 rangecount 可让您了解在 的半径内有多少 zip_availables那个距离。
  3. 过滤(首先,其中 COUNT(位置) > N)

我曾经创建示例数据:

INSERT INTO zips_required
SELECT to_char(10000 + 100 * ROWNUM) FROM dual CONNECT BY LEVEL <= 5;

INSERT INTO zips_available
(SELECT to_number(zip) + 10 * r, 100 - 10 * r FROM zips_required, (SELECT ROWNUM r FROM dual CONNECT BY LEVEL <= 9));

CREATE OR REPLACE FUNCTION zipdistance(zipfrom VARCHAR2,zipto VARCHAR2) RETURN NUMBER IS
BEGIN
RETURN abs(to_number(zipfrom) - to_number(zipto));
END zipdistance;
/

注意:您在问题中使用了 COUNT(locations) 和 SUM(locations),我认为是 COUNT(locations)

关于甲骨文分析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1033780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com