2014-02-13 103 views
0

我有以下格式的一些數據:如何自我加入MySQL中的聚合函數的結果?

Table: MountHeights 

ID | Height| Type | ItemCode  | Context 
-------------------------------------------- 
1 | 15 | max | BD1896-1W  | exterior 
2 | 12 | max | BD1896-1W  | insect 
3 | 18 | max | BD1896-1W  | interior 
4 | 13 | max | BD14120-1W | exterior 
5 | 10 | max | BD14120-1W | insect 
6 | 15 | max | BD14120-1W | interior 

有每個項目的代碼的多行。

我試圖找出一種方式來獲得max(Height)每個ItemCode其中Type =「最大」,出於某種原因,我不能完全包住我的身邊,我應該如何引用表本身的頭。

我希望得到的結果是沿着線:

Results: 

max(Height)| ItemCode 
--------------------------- 
18   | BD1896-1W 
15   | BD14120-1W 

我該怎麼辦呢?

回答

2

有沒有必要在這裏自我引用表。

SELECT `ItemCode`, MAX(`height`) 
FROM `MountHeights` 
WHERE `Type`= 'max' 
GROUP BY `ItemCode` 

Example Fiddle

+0

這是令人難以置信的快速 - 謝謝你!我幾乎擁有它。我試圖在最後查詢sans'GROUP BY',但由於它只返回了一個結果,我認爲GROUP BY沒有什麼區別。 –

+1

您需要每個產品代碼的最大高度,所以您當然必須逐項編碼。大多數其他dbms會在語句中給你一個語法錯誤,因爲它們要求每個選定的值要麼在GROUP BY子句中,要麼被聚合(使用MIN,MAX等)。這是SQL標準的一次,但由於SQL 99已經改變;只要它們是唯一的,您可以擁有非分組的非聚合列。 MySQL允許你選擇ItemCode而不用聚合或分組。不幸的是,它不檢查唯一性。 BD1896-1W和BD14120-1W都會產生錯誤。 –

+0

這個評論當然就是Zaemz的評論。 Sirko給出的答案非常好。我只是想向Zaemz解釋爲什麼有可能選擇ItemCode並得到意想不到的結果。 –

0

你也可以這樣做:

SELECT t1.ItemCode,max(t1.height) as height 
from MountHeights as t1, test as t2 
where t1.Type=t2.Type group by t1.Type