Запрос с группировкой по минимальной цене

Pustota

Новичок
Запрос с группировкой по минимальной цене

Здравствуйте.
Помогите справиться с запросом.
Есть таблица
Код:
id;brandid,groupid,size,price
И значения в ней например

Код:
1;22;33;12;100
2;33;44;12;200
3;22;33;12;80
4;33;22;10;140
5;22;33;12;90
Как сгруппировать их так чтобы выводились сгруппированные по минимальной цене и по заданным критериям.
То есть мне нужно чтобы brandid in (22,33) and groupid in (33,22), но дубли с ценой дороже минимальной не выскакивали. А когда этих позиций не будет, тогда чтобы выскакивали.

Результат хотел бы видеть что-то типа:
Код:
3;22;33;12;80
4;33;22;10;140
Пишу запрос:
SELECT id, MIN(price) from table WHERE brandid in (22,33) and groupid in (33,22) GROUP BY brandid, groupid, size;

А мне в итоге выдает цену минимальную, но id при этом ставит какой первый попадется, а не соответствующий минимальной цене. Подскажите, куда копать чтобы он вывел ID соответствующий минимальной цене?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
[offtop]
В таких случаях советую дамп базы (таблицу с куском данных) класть куда-нибудь, где можно было скачать все и не мучиться с созданием своей таблицы и забиванием данных. В голове все часто сложно представить и написать сразу запрос.
[/offtop]
 

Pustota

Новичок
Суть такова, что при группировке по минимальной цене, идентификатор идет не от той цены.
Он может запросто выдать
1;22;33;12;80
А что, цена минимальная, сгруппировано как надо, а то, что ID не от этой записи - как-то не важно. Вот я думаю, может еще навешать в запрос каких-то условий или в группировке что-то накрутить...
 

prolis

Новичок
немного расширю понятие "байду в подзапрос"
[sql]
SELECT brandid, groupid, size, MIN(price) as price from table WHERE brandid in (22,33) and groupid in (33,22) GROUP BY brandid, groupid, size
[/sql]
-этот запрос вернет минимальные цены в группах теперь определим любой (минимальный или максимальный) id:
[sql]
select min(t1.id) as id, t1.brandid, t1.groupid, t1.size, t1.price from table t1,
(SELECT brandid, groupid, size, MIN(price) as price from table WHERE brandid in (22,33) and groupid in (33,22) GROUP BY brandid, groupid, size) t2
where t1.brandid=t2.brandid and
t1.groupid=t2.groupid and
t1.size=t2.size and
t1.price=t2.price
group by t1.brandid, t1.groupid, t1.size, t1.price
[/sql]
 

Pustota

Новичок
Про байду спасибо, натолкнула меня на одну мысль. Это, конечно, хорошо, но дает нагрузку на базу больше, чем при обычном запросе. При 120 млн. записей это критично. Но все равно спасибо, вышел из ситуации.
 
Сверху