Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбрать строки с минимальными значениями, присутствует групировка GROUP BY. 
:(
    Опции темы
taral
Дата 24.3.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Кажется у меня не вышло нормально описать что мне нужно в названии темы.
Задача такова. Есть таблица.
id     title         cost     catalog_id
1     слово1     20          1
2     слово2     31          1
3     слово3     40          1
4     слово4     41          2
5     слово5     10          2
Примерно такое.
Мне нужно одним запросом получить для каждого каталога товар с наименьшей ценой.
В данном случае результат должен быть такого вида.
catalog_id     id       title        мин.цена
   1                 1      слово1        20
   2                 5      с лово5       10
Как вытащить минимальные цены я понимаю, но как вытащить строки с ними не выходит.
Код

SELECT wares.*, MIN(cost) as min FROM `codes`  GROUP BY ware_id

Таким образом я получаю первую попавшуюся строку в группировке. а в min минимальное значение. Но это не то что нужно.
Подскажите кто знает.

Добавлено через 6 минут и 26 секунд
Пробывал так. Но проблема в том что в условии HAVING значение cost уже цена первого попавшегося продукта =( Не знаю как быть.
Код

SELECT codes.*, MIN(cost) as min FROM `codes`  GROUP BY ware_id HAVING min IN (cost)

PM MAIL   Вверх
Akina
Дата 24.3.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Код

select t1.*
from wares as  t1
inner join 
(
select min(cost) as cost, catalog_id
from wares as t2
group by catalog_id
) as t2
on t1.cost=t2.cost
and t1.catalog_id=t2.catalog_id

Если же для одного catalog_id есть несколько записей с одинаковым минимальным cost и разными id - вернутся они все.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
taral
Дата 24.3.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Так работает. Но Тут есть вложенный запрос. Может можно как то без него.
Код

SELECT * FROM wares as w, (SELECT MIN(cost) as min, catalog_id FROM `wares` GROUP BY catalog_id) as b WHERE c.catalog_id  = b.catalog_id AND c.cost = b.min


Добавлено @ 18:11
Akina  спасибо. Когда вы ответили я видно писал что у меня вышло=)

Это сообщение отредактировал(а) taral - 24.3.2009, 18:11
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.