繁体   English   中英

如何在 MySQL 中使用自连接查找列的最大值?

[英]How to find Max value of a column using self join in MySQL?

问题是:找到价格最高的打印机型号。 结果集:model,价格

数据库模式是:打印机(代码,model,颜色,类型,价格)

我想使用自连接找到最高价格。我写的查询是:

select model,price
from printer
where not exists
(
select p2.model,p2.price
    from printer p1, printer p2
    where p2.price<p1.price
)

子查询似乎是正确的,因为它不包括最高的,但整个查询给出的是空表。 问题的链接是: http://www.sql-ex.ru/learn_exercises.php#answer_ref

您没有正确编写相关子查询。 您需要引用回您正在读取的表(即外部查询),而不是在子查询中再次包含它:

SELECT model, price
FROM printer p1
WHERE NOT EXISTS (SELECT * FROM printer p2 WHERE p2.price > p1.price)

请注意,这不是自联接,而是相关子查询。 要使用自联接编写此 function,请使用LEFT JOIN并检查联接表中的值是否为NULL

SELECT p1.model, p1.price
FROM printer p1
LEFT JOIN printer p2 ON p2.price > p1.price
WHERE p2.model IS NULL

另请注意,正如@kmoser 在评论中指出的那样,您可以使用ORDER BYLIMIT更简单地执行此操作:

SELECT model, price
FROM printer 
ORDER BY price DESC
LIMIT 1

SQLFiddle上所有三个查询的演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM