Выбор одной максимальной строки из каждой группы
В примере 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 ответа
Просто группа по 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
именно то, что вы предпочитаете
Используйте предложение 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;