每组有一条记录?

时间:2010-01-23 20:10:03

标签: sql group-by

说我有这样一张桌子:

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记录。

2 个答案:

答案 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;