Принимая во внимание, что вы используете нестандартную функцию, т.е. группировка по подмножеству необобщенных столбцов, в этом случае (не гарантируется) первая строка возвращается для каждой группы ...
ли группу более чем упорядоченный набор строк, который сталкивается ненулевые величины до того нулевых величин:
SELECT * FROM (
SELECT * FROM products
ORDER BY quantity desc
) x
GROUP BY product_code
Примечание. Реализация, которую вы используете, ведет себя таким образом, но не даются гарантии, что будущие версии будут продолжать надежно работать так, как вы хотите.
Кроме того, в соответствии с documentation:
С MySQL 5.7.5, то режим SQL по умолчанию включает в себя ONLY_FULL_GROUP_BY
.
Это значит, что ваш запрос не будет работать на 5.7.5+, если вы не отключите ONLY_FULL_GROUP_BY
после установки.
Надежный и портативный способ заключается в использовании подзапроса, который находит все необходимые количества и присоединяется к нему. Но у вас есть дополнительное усложнение, что количество не является уникальным для продукта, так что вы должны разорвать связь, используя сумму:
SELECT p.*
FROM products p
JOIN (SELECT p2.product_code, max_quantity, max(amount) max_amount
FROM products p2
JOIN (SELECT product_code, MAX(quantity) max_quantity
FROM products
GROUP BY product_code) q
ON q.product_code = p2.product_code
AND max_quantity = p2.quantity
GROUP BY product_code, max_quantity) qa
ON p.product_code = qa.product_code
AND quantity = max_quantity
AND amount = max_amount
Первый подзапрос находит максимальное количество (что данные, которые вы хотите), то следующий подзапрос находит максимальное количество всех строк с таким максимальным количеством (может быть более одной строки, разделяющей максимальную сумму). Поскольку комбинация кода продукта, количества и количества уникальна, присоединяется к таблице, используя эти значения, чтобы дать вам нужные строки.
Отказ от ответственности: Код не может скомпилировать или работать, как это было просмотрел в на моем телефоне (но есть разумный шанс, что он будет работать)
Вы пишете: «Это имеет два столбца в качестве первичного ключа: product_code и product_weight ". Бит на изображении я вижу ключевой символ на 'product_code' и' amount'. –
@PaulSpiegel извините за это, только что обновил мой вопрос. –