SQL не видит псевдоним

0
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'

  • 1
    Предоставьте образец данных и желаемых результатов. Подзапрос на самом деле не имеет смысла. И в запросе нет ссылки на что-либо вроде shop.p.id.product .
  • 0
    Вы GROUP BY производителя и выберите имя и приз?
Показать ещё 2 комментария
Теги:
database

2 ответа

0
Лучший ответ

Я думаю, что вместо этого вам нужен коррелированный 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;
0

В вашем запросе ничего такого нет. Я бы порекомендовал написать запрос, указав все ссылки на столбцы:

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
                 );
  • 1
    Как вы можете GROUP BY manufacturer и SELECT name, manufacturer, prize ?
  • 0
    Квалификация всех ссылок на столбцы не помогает. Это та же ошибка.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню