Получение уникальных значений поля (GROUP BY) и min/max значений других полей - MySQL
Формулировка задачи:
Доброго времени суток.
Есть таблица из 4 полей:
id - уникальный AI, остальные - обычные неуникальные поля. enabled может быть 0 или 1.
Допустим, есть несколько записей:
Необходимо получить:
1. Все уникальные значения поля article.
2. Для каждого поля article получить минимальный price максимального enabled. Т.е. результат должен быть такой:
Т.е.:
1. Берём артикул, ищем среди его записей максимальный enabled.
2. Среди записей с таким enabled ищем минимальный price.
Сижу около 3 часов, пробую разные запросы, но никак не могу составить ничего адекватного. Пока что написал запрос для одного заранее известного артикула:
Но по задаче нужно получить не один, а все артикулы, и подставлять в оба WHERE все уникальные артикулы, я так понимаю, нет возможности.
Подскажите, в какую сторону копать. Благодарю.
id | article | price | enabled
1 | art1 | 500 | 1 2 | art1 | 700 | 1 3 | art2 | 500 | 0 4 | art2 | 700 | 1
article | price | enabled |
art1 | 500 | 1 |
art2 | 700 | 1 |
SELECT *, (SELECT `price` FROM `test` WHERE `article` = 'art1' ORDER BY `enabled` DESC, `price` LIMIT 1) AS 'max_price' FROM `test` WHERE `article` = 'art1' GROUP BY `article`
Решение задачи: «Получение уникальных значений поля (GROUP BY) и min/max значений других полей»
textual
Листинг программы
SELECT main.article, MIN(main.price) FROM TABLE_NAME main JOIN ( SELECT article, MAX(enabled) AS maxenabled FROM TABLE_NAME GROUP BY article ) nested ON main.article = nested.article AND main.enabled = nested.enabled GROUP BY main.article
Объяснение кода листинга программы
Код выполняет следующую задачу: он выбирает уникальные значения поля article
из таблицы TABLE_NAME
и для каждого из этих значений находит минимальное значение поля price
. При этом используется подзапрос, который выбирает максимальное значение поля enabled
для каждого уникального значения поля article
. Это делается для того, чтобы выбрать только те записи, которые имеют минимальное значение поля price
при максимальном значении поля enabled
.
- SELECT main.article, MIN(main.price)
- FROM TABLE_NAME main
- JOIN ( SELECT article, MAX(enabled) AS maxenabled FROM TABLE_NAME GROUP BY article ) nested ON main.article = nested.article AND main.enabled = nested.enabled
- GROUP BY main.article
Выполнение этого кода может быть полезно, если нужно найти наиболее выгодные предложения по покупке товаров, исходя из их цены и доступности (т.е. максимального значения поля
enabled
).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д