Найдите сведения о вводе минимальной цены для каждой группы строк с одинаковым артикульным номером.

Я много читал об этом, но ничего не помогло мне. Кто-нибудь может помочь?

У меня есть большая таблица с множеством разных артикулов (много с одним и тем же EAN), и мне всегда нужен только самый дешевый (отсортировать по цене) с правильным AN:

*art   price   an    ean
*Test |79,00|15770|0808736558136
*Test |85,00|k3238|0808736558136
*Test |68,00|r4850|0808736558136
*Test |65,00|a1117|0808736558136
*Test |78,00|t8619|0808736558136

Ожидайте этого:

*Test |65,00|a1117|0808736558136

person Thomas B    schedule 22.05.2012    source источник
comment
Вы хотите отредактировать заголовок вопроса? На самом деле это не сортировка перед группировкой, хотя я понимаю, почему вы ожидали такого решения.   -  person Jirka Hanika    schedule 22.05.2012
comment
Извините, я не очень хорош в поиске английских объяснений моей проблемы :-)   -  person Thomas B    schedule 22.05.2012
comment
Оглядываться назад всегда легче. Спасибо.   -  person Jirka Hanika    schedule 22.05.2012


Ответы (2)


SELECT B.*
  FROM BigTable AS B -- Why do SQL questions omit the table names so often?
  JOIN (SELECT EAN, MIN(Price) AS Price
          FROM BigTable
         GROUP BY EAN
       ) AS P
    ON B.EAN = P.EAN AND B.Price = P.Price
 ORDER BY B.EAN;

Подзапрос находит минимальную цену для каждого EAN; внешний запрос находит детали, соответствующие EAN и минимальной цене для этого EAN. Если есть две записи с одинаковой минимальной ценой для данного EAN, будут выбраны обе.

person Jonathan Leffler    schedule 22.05.2012
comment
Ошибка Mysql: столбец «ean» в предложении заказа неоднозначен - person Thomas B; 22.05.2012
comment
ОК - разберитесь. Это не так сложно сделать. :D Я исправлю. - person Jonathan Leffler; 22.05.2012
comment
Привет вместе! После обновления до mysql 5.1.69 указанная выше группировка больше не работает. В BigTable много повторяющихся EAN, которые не сгруппированы, но почему? ‹code›*art price an ean *Тест |79,00|15770|0808736558136 *Тест |79,00|a1234|0808736558136 *Тест |79,00|b1234|0808736558136 *Тест |79,00|c1234|080873655813/6 ⹀655813/6 код> - person Thomas B; 13.06.2013

person    schedule
comment
Это работает для единственного EAN с самой низкой ценой; но не очень хорошо обобщает. Вы можете добавить предложение WHERE, чтобы указать один EAN, который вам нужен, но если вам нужно много? - person Jonathan Leffler; 22.05.2012
comment
@JonathanLeffler: но мы не заказываем по EAN .... так что, если EAN одинаковые, в чем проблема? Наверное, я все еще неправильно понимаю вопрос - person DonCallisto; 22.05.2012
comment
Это будет работать для выборочных данных, где есть только один EAN. В BigTable будет много EAN, но ваш запрос по-прежнему будет возвращать только одну строку, а не по одной строке на отдельный EAN. - person Jonathan Leffler; 22.05.2012
comment
@JonathanLeffler: хорошо, теперь я понял .. Ожидаемый результат сбивает меня с пути, потому что не дает больше одной строки ... - person DonCallisto; 22.05.2012