Получение уникальных значений поля (GROUP BY) и min/max значений других полей - MySQL

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Есть таблица из 4 полей:
id | article | price | enabled
id - уникальный AI, остальные - обычные неуникальные поля. enabled может быть 0 или 1. Допустим, есть несколько записей:
1 | art1 | 500 | 1
2 | art1 | 700 | 1
3 | art2 | 500 | 0
4 | art2 | 700 | 1
Необходимо получить: 1. Все уникальные значения поля article. 2. Для каждого поля article получить минимальный price максимального enabled. Т.е. результат должен быть такой:
article price enabled
art1 500 1
art2 700 1
Т.е.: 1. Берём артикул, ищем среди его записей максимальный enabled. 2. Среди записей с таким enabled ищем минимальный price. Сижу около 3 часов, пробую разные запросы, но никак не могу составить ничего адекватного. Пока что написал запрос для одного заранее известного артикула:
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`
Но по задаче нужно получить не один, а все артикулы, и подставлять в оба WHERE все уникальные артикулы, я так понимаю, нет возможности. Подскажите, в какую сторону копать. Благодарю.

Решение задачи: «Получение уникальных значений поля (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.

  1. SELECT main.article, MIN(main.price)
  2. FROM TABLE_NAME main
  3. JOIN (     SELECT article, MAX(enabled) AS maxenabled     FROM TABLE_NAME     GROUP BY article     ) nested ON main.article = nested.article AND main.enabled = nested.enabled
  4. GROUP BY main.article Выполнение этого кода может быть полезно, если нужно найти наиболее выгодные предложения по покупке товаров, исходя из их цены и доступности (т.е. максимального значения поля enabled).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы