SELECT name,
manufacturer,
prize
FROM products AS p
GROUP BY manufacturer
HAVING prize = (
SELECT Max(prize)
FROM products p1
WHERE p.'id-product' = p1.'id-product'
GROUP BY p1.manufacturer DESC
LIMIT 1
)
И ошибка:
# 1054 - Неизвестный столбец 'shop.p.id.product' в 'предложении where'
Я думаю, что вместо этого вам нужен коррелированный subquery
:
SELECT p.name, p.manufacturer, p.prize
FROM products AS p
WHERE p.prize = (SELECT MAX(p1.prize) FROM products p1 WHERE p1.manufacturer = p.manufacturer);
Таким образом, вы получите manufacturer
с самой высокой ценой.
РЕДАКТИРОВАТЬ: если один product
имеет такой же prize
то вам понадобится столбец PK
(Primary/Identity), в котором указана уникальная последовательность:
SELECT p.name, p.manufacturer, p.prize
FROM products AS p
WHERE p.pk = (SELECT p1.pk
FROM products p1
WHERE p1.manufacturer = p.manufacturer
ORDER BY p1.prize DESC
LIMIT 1
);
Если вы работаете с последней версией MySQL
, вы также можете использовать функцию ранжирования:
SELECT p.*
FROM (SELECT p.name, p.manufacturer, p.prize,
ROW_NUMBER() OVER (PARTITION BY p.manufacturer ORDER BY p.prize DESC) AS Seq
FROM products AS p
) p
WHERE Seq = 1;
В вашем запросе ничего такого нет. Я бы порекомендовал написать запрос, указав все ссылки на столбцы:
SELECT p.name, p.manufacturer, p.prize
FROM products p
GROUP BY p.manufacturer
HAVING p.prize = (SELECT MAX(p1.prize)
FROM products p1
WHERE p.'id-product' = p1.'id-product'
GROUP BY p1.manufacturer DESC
LIMIT 1
);
MySQL допускает синтаксис с дополнительными столбцами в SELECT
, которых нет в GROUP BY
, так что это не (обычно) генерирует ошибку. Это не правильно, однако, по правилам SQL.
Я не уверен, что должен делать подзапрос. Если вы хотите, чтобы производители имели самую высокую цену, вы бы не использовали GROUP BY
в подзапросе.
Если вы хотите самый дорогой продукт для каждого производителя:
SELECT p.name, p.manufacturer, p.prize
FROM products p
HAVING p.prize = (SELECT MAX(p1.prize)
FROM products p1
WHERE p.manufacturer = p1.manufacturer
LIMIT 1
);
GROUP BY manufacturer
и SELECT name, manufacturer, prize
?
shop.p.id.product
.