Выбор одной максимальной строки из каждой группы - PullRequest
0 голосов
/ 19 сентября 2011

в примере 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 | 
+--------+----------+-------+

Какв этом случае я получаю только одну запись для каждого типа?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2011

Используйте предложение GROUP BY - т.е.

 select type, variety, price
 from fruits
 where price = (select min(price) from fruits as f where f.type = fruits.type)
 group by type;
0 голосов
/ 19 сентября 2011

Просто сгруппируйте по 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

При этом вы получите первый элемент (в алфавитном порядке)

Кстати: вы также можете использовать MAX, именно то, что вы предпочитаете

...