2010-01-23 178 views
1

說我有像這樣的表:每組有一條記錄?

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樣本輸出(上面的),應該是這樣的:

5 | 1 | 5 | 1 | 2 | r 
5 | 2 | 5 | 0 | 3 | g 
5 | 2 | 5 | 1 | 3 | b 

基本上它應該返回4,第5和第6次的紀錄。

+4

你能展示你想要的輸出樣本嗎? –

+1

你能提供一個來自這個查詢的示例輸出嗎?我對此有一點理解。 – llamaoo7

+0

不清楚你在做什麼。 「最大面積」是指所有顏色或一種特定顏色的最大面積? – John

回答

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 

如果你想要一個更好的答案,請澄清我已經發布的評論(其中一些被隱藏)的所有問題。

+0

對於給定的表格,這是正確的答案,但將派生表加入獨特的主鍵是更好的做法。當多個'r'行具有相同的區域時,會發生什麼情況,但行中其他地方的數據不同? –

+0

@Michael,你當然應該使用PK。我在評論中詢問他是否有主鍵,但他還沒有回答。因此,我會假設他沒有一個PK直到告訴別的。不幸的是,我的很多要求澄清的評論已被隱藏:( –

+0

不用擔心,我的評論更多地指向OP,以及任何未來觀看此視頻的人。 –

0
select *, max(area), color from T group by color;