да...действительно
по другому полю и MIN не работает
(Добавление)
так что ... подзапросы?
31. LIME - 21 Мая, 2013 - 14:55:04 - перейти к сообщению
32. Champion - 23 Мая, 2013 - 20:09:22 - перейти к сообщению
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)
33. LIME - 23 Мая, 2013 - 21:59:23 - перейти к сообщению
спасибо
34. Saymor - 24 Мая, 2013 - 07:19:15 - перейти к сообщению
Всем спасибо!
вопрос решил вот таким запросом:
вопрос решил вот таким запросом:
CODE (htmlphp):
скопировать код в буфер обмена
скопировать код в буфер обмена
- "SELECT *,"
- ."\n MIN(summa) AS summa_min"
- ."\n FROM table WHERE idObj=11
взял только минимальные значения
всеравно как-то криво работает!
поэтому остановился на таком запросе:
CODE (htmlphp):
скопировать код в буфер обмена
скопировать код в буфер обмена
- SELECT * FROM teble WHERE idObj=11 ORDER BY summa ASC LIMIT 1