说我有这样一张桌子:
x1 | y1 | x2 | y2 | area | color
5 | 0 | 5 | 0 | 1 | r
5 | 0 | 6 | 0 | 2 | g
5 | 1 | 5 | 0 | 2 | b
5 | 1 | 5 | 1 | 2 | r
5 | 2 | 5 | 0 | 3 | g
5 | 2 | 5 | 1 | 3 | b
如何构造SQL查询以使得结果表具有一个的r,g,b(每个都具有最大区域),还保留坐标这个记录?我尝试了MAX(AREA)和GROUP BY颜色,但这给了我r,g,b最大面积的记录,但没有与它们的坐标一起。
我正在使用PostgreSQL Sample输出(对于上面的那个),应该是这样的:
5 | 1 | 5 | 1 | 2 | r
5 | 2 | 5 | 0 | 3 | g
5 | 2 | 5 | 1 | 3 | b
基本上它应该返回第4,第5和第6记录。
答案 0 :(得分:3)
你的问题有点不清楚,但我猜你想要这个:
SELECT T2.* FROM (
SELECT color, max(area) AS area
FROM table1
GROUP BY color) AS T1
JOIN table1 AS T2
ON T1.area = T2.area AND T1.color = T2.color
请注意,它假设最大区域是唯一的,否则您将获得多行。
您的数据输出:
x1 | x2 | y1 | y2 | area | color
5 | 1 | 5 | 1 | 2 | r
5 | 2 | 5 | 0 | 3 | g
5 | 2 | 5 | 1 | 3 | b
如果您想要更好的答案,请澄清我作为评论发布的所有问题(其中一些是隐藏的)。
答案 1 :(得分:0)
select *, max(area), color from T group by color;