MySQL - ограничение группы байтов - PullRequest
2 голосов
/ 02 февраля 2011

Представьте, что у вас есть стол с продуктами. Каждый товар имеет цену и относится к определенной категории. Кроме того, каждый продукт также относится к подкатегории. А что если вы хотите найти самый дешевый продукт для каждой подкатегории? Это просто:

SELECT MIN(price), sub_category FROM products GROUP BY sub_category

правый

Теперь представьте, что вы хотите показать максимум 2 продукта для каждой категории (не подкатегории) для указанного выше результата. Есть ли способ добиться этого в SQL?

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Если у продуктов есть уникальный идентификатор, вы можете попробовать это:

select * from products p
where p.id in (select p1.id from products p1 
    where p.category = p1.category order by price limit 0,2)
and price = (select min(price) from products p2 
    where p2.sub_category = p.sub_category)

РЕДАКТИРОВАТЬ: @wimvds: Спасибо за указание на ошибку.

РЕДАКТИРОВАТЬ 2: Я думаю, это все ещеневерно, если в подкатегории больше одного товара с минимальной ценой.

0 голосов
/ 02 февраля 2011

Не должно ли быть так:

select * from products p, products p1 where p.id in (select min(price) from products p2      where p2.sub_category = p2.sub_category) and p1.category=p.category order by p.price limit 0,2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...