2011-09-19 56 views
0

例如Xaprb http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ 每個組從每個組中選擇一個最大行

+--------+------------+-------+ 
| type | variety | price | 
+--------+------------+-------+ 
| apple | gala  | 2.79 | 
| apple | fuji  | 0.24 | 
| apple | limbertwig | 2.87 | 
| orange | valencia | 3.59 | 
| orange | navel  | 9.36 | 
| pear | bradford | 6.05 | 
| pear | bartlett | 2.14 | 
| cherry | bing  | 2.55 | 
| cherry | chelan  | 6.33 | 
+--------+------------+-------+ 

select type, variety, price 
from fruits 
where price = (select min(price) from fruits as f where f.type = fruits.type); 

+--------+----------+-------+ 
| type | variety | price | 
+--------+----------+-------+ 
| apple | fuji  | 0.24 | 
| orange | valencia | 3.59 | 
| pear | bartlett | 2.14 | 
| cherry | bing  | 2.55 | 
+--------+----------+-------+ 

選擇最大,但如果我有一個水果與某些價格是重複的記錄

+--------+----------+-------+ 
| type | variety | price | 
+--------+----------+-------+ 
| apple | fuji  | 0.24 | 
| apple | fuji2 | 0.24 | 
| orange | valencia | 3.59 | 
| pear | bartlett | 2.14 | 
| cherry | bing  | 2.55 | 
+--------+----------+-------+ 

如何在這種情況下,每種類型只能得到一條記錄嗎?

通過 type

select type, MIN(variety) AS variety, MIN(price) AS price 
from fruits 
where price = (select min(price) from fruits as f where f.type = fruits.type); 
GROUP BY type 

WHIS這個你得到的第一項(排名不分先後)

回答

0

剛組

BTW:你也可以使用MAX,正是你喜歡

+0

我不能使用group,in selec我使用列不參加組和聚合函數 – eugenes

+0

然後給我們您的完整'SELECT'語句 – rabudde

+0

所有字段從表 – eugenes

0

使用一組BY子句 - 即

select type, variety, price 
from fruits 
where price = (select min(price) from fruits as f where f.type = fruits.type) 
group by type; 
相關問題