自学内容网 自学内容网

leetcode 1459 矩形面积(postgresql)

需求

表: Points

±--------------±--------+
| Column Name | Type |
±--------------±--------+
| id | int |
| x_value | int |
| y_value | int |
±--------------±--------+
id 是该表主键
每个点都用二维坐标 (x_value, y_value) 表示

写一个 SQL 语句,报告由表中任意两点可以形成的所有 边与坐标轴平行 且 面积不为零 的矩形。

结果表中的每一行包含三列 (p1, p2, area) 如下:

p1 和 p2 是矩形两个对角的 id
矩形的面积由列 area 表示
请按照面积 area 大小降序排列;如果面积相同的话, 则按照 p1 升序排序;若仍相同,则按 p2 升序排列。

查询结果如下例所示:

Points 表:
±---------±------------±------------+
| id | x_value | y_value |
±---------±------------±------------+
| 1 | 2 | 7 |
| 2 | 4 | 8 |
| 3 | 2 | 10 |
±---------±------------±------------+

Result 表:
±---------±------------±------------+
| p1 | p2 | area |
±---------±------------±------------+
| 2 | 3 | 4 |
| 1 | 2 | 2 |
±---------±------------±------------+

p1 = 2 且 p2 = 3 时, 面积等于 |4-2| * |8-10| = 4
p1 = 1 且 p2 = 2 时, 面积等于 ||2-4| * |7-8| = 2
p1 = 1 且 p2 = 3 时, 是不可能为矩形的, 面积等于 0

输入

在这里插入图片描述

输出

with t1 as (
select p1.id as p1_id,p2.id as p2_id,(abs(p1.x_value-p2.x_value)*abs(p1.y_value-p2.y_value)) as area
from Points p1
inner join points p2
on 1=1 and p1.id != p2.id
)
select distinct least(p1_id,p2_id) as p1,greatest(p1_id,p2_id) as p2,area
from t1
where area !=0
order by area,p1,p2 desc;

在这里插入图片描述


原文地址:https://blog.csdn.net/weixin_51696882/article/details/140460426

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!