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 - 'where 子句'中的未知列'shop.p.id.product'

4

2 回答 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最高的价格获得 s。

编辑:如果product有相同的prize,那么您将需要PK指定唯一序列的(主要/身份)列:

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;
于 2018-12-27T11:55:15.683 回答
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
                 );

SELECTMySQL 允许在中使用不在 中的额外列的语法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
                 );
于 2018-12-27T11:56:21.150 回答