imya пишет:Не вижу проблемы) Эээ. Вы доа=вольно своеобразно используете SQL. Я ваш запрос ен понимаю. И Mysql не поймет, хотя и вернет какие-то странные строки. Другие субд пошлют вас с таким запросом.
LIME пишет:HAVING работает только с агрегирующими ф-циями нет) С любым столбцом результирующего набора, получившимся после группирования и использования вычислимых столбцов.
(Добавление)
Сейчас напишу немного теории, а потом немного практики
(Добавление)
Как работает HAVING. Точнее, как работает запрос вообще. Сначала происходит фильтрация по условиям, указанным в WHERE и группировки. Здесь используются данные таблиц и индексов. После этого получается результирующий набор, который можно отфильтровать с помощью having. Это как будто взять в скобки наш первый запрос, написать перед скобками select * from, а после скобок where с тем условием, которое вы пытаетесь запихать в хэвинг. Попробуйте и осознаете, почему having price=min(price) не имеет особого смысла.
Теперь практика.
В mysql мы можем, например, так (в порятке предпочтения)
1. select * from tbl where price in (select min(price) from tbl union all select min(price) from tbl)
2. select * from tbl join (select min(price) minp, max(price)maxp from tbl) t ON price IN (maxp,minp)
3. Те же 2 запроса, но min и max можно заменить на order by asc/desc с limit 1 - это иногда быстрее.
4. Использовать переменную. Но это муторно, мне лень писать. Если только заинтересует.
5. Через not exists
В нек. ругих субд можно написать
select *, min(price) over(partition by Obj) minp, max(price) over(partition by Obj) maxp
from tbl
having price in (minp, maxp)
|