mysql:如何显示属性值最小的元组?

myss37ts  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(292)

这个问题在这里已经有答案了

sql:选择不同行时按一个字段中的最小值分组(9个答案)
两年前关门了。
我创建了一个具有以下属性的books表:books(bookid、bookname、author、price)
现在我想找出价格最低的那本书的名字(最便宜的书的名字),以及它的价格。
为此,我做了如下工作:

SELECT min(Price) FROM Books;

这给了我最低价格(55.36美元)。然后我用了:

SELECT BookName,Price FROM Books 
WHERE Price=55.36;

这给了我想要的答案。。。
但我想问,有没有更好的方法,这样我就不需要知道最低价格,然后才能找到答案?我可以在一个单一的查询吗?
我试过这样的方法:

SELECT BookName,Price FROM Books
WHERE Price=min(Price);

但我得到了一个无效的使用组函数的错误。任何帮助都将不胜感激。我使用的是mysql服务器8.0版。
谢谢!

vjhs03f7

vjhs03f71#

在派生表中,可以确定所有书籍的最小价格值。现在,您可以将这个结果集连接回主表 Books 关于最小价格值,得到具有最低价格的行。

SELECT b1.BookName, 
       b1.Price 
FROM Books AS b1 
JOIN (SELECT MIN(b2.Price) AS min_price 
      FROM Books AS b2
     ) AS dt ON dt.min_price = b1.Price

另一种方法是使用子查询。在子查询中,确定最小价格值,然后使用 WHERE .. IN(..) 要确定具有最低价格值的行,请执行以下操作:

SELECT b1.BookName, 
       b1.Price 
FROM Books AS b1 
WHERE b1.Price IN (SELECT MIN(b2.Price)
                   FROM Books AS b2)

相关问题