mysql - SQL 看不到别名

标签 mysql sql database

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 - Unknown column 'shop.p.id.product' in 'where clause'

最佳答案

我认为您需要相关的子查询:

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);

通过这种方式,您将获得价格最高的制造商

编辑:如果一个产品具有相同的奖品,那么您将需要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;

关于mysql - SQL 看不到别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53944634/

相关文章:

database - WHERE IN () db2 谓词的上限是多少?

php - 使用 mysql 中的枚举字段选择行

php - MySQL Join查询贷方余额

MySQL where subselect on multiple fields

SQL Server delete nowait 不起作用

sql - 按日期范围分组 (teradata)

Mysql程序: SELECT and UPDATE

php - PHP中MySQL用户定义的@variable为空

sql - 查询获取不活跃用户

mysql - 如何将数据从MySQL 5迁移到Sybase ASE 15.5?