Вчера я задал вопрос о создании запроса типа «наибольшее n на группу» (в то время, не зная, что это называется «наибольшее n на группу»), но я спросил, как получить наименьшее значение на группу. . Структура таблицы была следующей:
type name value
=====================
1 item1 1
1 item2 20
2 item3 0
3 item4 5
3 item5 2
3 item6 50
Я получил несколько замечательных ответов, и самый полезный из них был следующим:
SELECT t1.type, t1.name, t1.value
FROM mytable t1
LEFT JOIN mytable t2 ON t1.type = t2.type AND t1.value > t2.value
WHERE t2.value IS NULL
Приведенный выше запрос приводит к следующему результату:
type name value
=====================
2 item3 0
1 item1 1
3 item5 2
Однако, задав вопрос, я понял, что не учел важное требование, которое я не могу понять, как добавить к приведенному выше запросу.Мне нужно добавить условный оператор, который вместо выбора строки с наименьшим значением для столбца на группу выбирает строку с наименьшим значением для столбца на группу, но где эта строка имеет другой столбец со значением больше чем некоторое минимальное значение.
Вот мой новый вопрос/проблема:
У меня есть следующая таблица (продукты):
+-----------------------------------------------------------+
| id | type | name | popularity | price |
+-----------------------------------------------------------+
| 0 | 0 | item1 | 3.5 | 0.99 |
| 3 | 1 | item2 | 3 | 1.99 |
| 4 | 1 | item3 | 6 | 2.95 |
| 6 | 1 | item4 | 9 | 2.50 |
| 9 | 1 | item5 | 12 | 3.75 |
| 12 | 2 | item6 | 16 | 5.25 |
| 13 | 2 | item7 | 32 | 10.95 |
| 14 | 2 | item8 | 48 | 7.50 |
+-----------------------------------------------------------+
Мне нужно получить товар с наименьшей ценой в каждой группе (группы представляют собой разные значения типа) с популярностью быть больше некоторой суммы (если ни один элемент в группе не имеет популярности выше указанной суммы, то никакие предметы из этой группы не должны быть возвращены). Последняя часть этого предложения - то, как этот вопрос отличается от моего последнего вопроса. Желательно, чтобы результаты возвращались отсортированными по цене в порядке возрастания.
Итак, предположим, что популярность должна быть больше 3, тогда результат должен быть:
+-----------------------------------------------------------+
| id | type | name | popularity | price |
+-----------------------------------------------------------+
| 0 | 0 | item1 | 3.5 | 0.99 |
| 6 | 1 | item4 | 9 | 2.50 |
| 12 | 2 | item6 | 16 | 5.25 |
+-----------------------------------------------------------+
Если популярность должен быть больше 6, то результат должен быть:
+-----------------------------------------------------------+
| id | type | name | popularity | price |
+-----------------------------------------------------------+
| 6 | 1 | item4 | 9 | 2.50 |
| 12 | 2 | item6 | 16 | 5.25 |
+-----------------------------------------------------------+
Надеюсь, я выполнил оба эти условия. примеры правильно. В любом случае, я думаю, вы поняли идею.
Можно ли сделать то, что я прошу, одним запросом?