Выбрать строку с максимумом

akulina

Новичок
Выбрать строку с максимумом

Всем привет,

Посмотрела результаты поиска по форуму, но то, что мне нужно не нашла.

а проблема состоит в следующем
есть таблица

id, bid, rate, rate2

1, 2, 1, 1
2, 2, 2, 1
3, 2, 3, 2
4, 2, 3, 3
5, 3, 10, 1
6, 3, 15, 1
7, 4, 6, 1

Мне нужно выбрать строку с максимальным значением rate, и если они совпадают, то тогда с максимальным rate2
для групп с одинаковым bid

то есть результат должен быть следующим

4, 2, 3, 3
6, 3, 15, 1
7, 4, 6, 1

если бы не rate2, то тогда все нормально - запрос с вложенным подзапросом я видела, но тут сложнее.

и еще насколько я понимаю, если в запросе будет подзапрос, то при 7ми записях выполнится 8 запросов (1 основной, 7 подзапросов) или я не права?
 

zerkms

TDD infected
Команда форума
[sql]
SELECT `t`.* FROM `t` INNER JOIN
(
SELECT MAX(`rate`) AS `mr`, MAX(`rate2`) AS `mr2`, `bid` FROM `t`
GROUP BY `bid`
) `x`
ON `t`.`bid` = `x`.`bid` AND `t`.`rate` = `x`.`mr` AND `t`.`rate2` = `x`.`mr2`
GROUP BY `t`.`id`
[/sql]
если хочется в один запрос
но мне кажется, что в 2 в этой ситуации будет быстрее
 

akulina

Новичок
Спасибо большое, действительно работает.

Только такие вопросы еще есть :))

1. Почему не выводится нужная мне строка, если я меняю условие, что rate2 должен быть минимальным? то есть MIN(rate2) в вашем запросе?

2. А в два запроса как? через, скажем, темповую таблицу?

типа вот этого:
insert into temp
SELECT MAX( `rate` ) AS `mr` , MAX( `rate2` ) AS `mr2` , `bid`
FROM `t`
GROUP BY `bid`


select * from t, temp x
where `t`.`bid` = `x`.`bid` AND `t`.`rate` = `x`.`mr` AND `t`.`rate2` = `x`.`mr2`
GROUP BY `t`.`id`

или это то же самое по производительности?
 

zerkms

TDD infected
Команда форума
akulina
1. посмотрите explain'ы и сделайте выводы
2. мой запрос кстати чуток не верный получился - ибо выбираются вообще максимальные значения, а не максимальные при условии - что rate равные
так что нужно его будет чуток переписать ;) именно поэтому и не работает MIN
 

Avenus

Under Glory Yield
Re: Выбрать строку с максимумом

Автор оригинала: akulina
если бы не rate2, то тогда все нормально - запрос с вложенным подзапросом я видела, но тут сложнее.
Напиши, пожалуйста, такой запрос без rate2
 

Фанат

oncle terrible
Команда форума
супер. отличный способ "поискать".
просто пойти в соседнюю тему с тем же самым вопросом.
и - хватило ума - тому же самому человеку.
 
Сверху