题目介绍: 矩形面积 rectangles-area
难度中等
SQL架构
表:
Points
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| x_value | int |
| y_value | int |
+---------------+---------+
id 是该表主键.
每个点都表示为二维空间 (x_value, y_value).
写一个 SQL 语句, 报告由表中任意两点可以形成的所有可能的矩形.
结果表中的每一行包含三列 (p1, p2, area) 如下:
请按照面积大小降序排列,如果面积相同的话, 则按照 p1 和 p2 升序对结果表排序
``` Points 表: +----------+-------------+-------------+ | id | x_value | y_value | +----------+-------------+-------------+ | 1 | 2 | 8 | | 2 | 4 | 7 | | 3 | 2 | 10 | +----------+-------------+-------------+
Result 表: +----------+-------------+-------------+ | p1 | p2 | area | +----------+-------------+-------------+ | 2 | 3 | 6 | | 1 | 2 | 2 | +----------+-------------+-------------+
p1 应该小于 p2 并且面积大于 0. p1 = 1 且 p2 = 2 时, 面积等于 |2-4| * |8-7| = 2. p1 = 2 且 p2 = 3 时, 面积等于 |4-2| * |7-10| = 6. p1 = 1 且 p2 = 3 时, 是不可能为矩形的, 因为面积等于 0. ```
sql
select a.id P1,b.id P2,abs(a.x_value-b.x_value)*abs(a.y_value-b.y_value) as area
from Points a,Points b
where a.id<b.id and a.x_value != b.x_value and a.y_value != b.y_value
order by area desc,P1 ,P2