如何在max函数中使用selectquery?

cu6pst1q  于 2021-08-13  发布在  Java
关注(0)|答案(3)|浏览(656)

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

如何在mysql表中选择最大值行(7个答案)
11个月前关门了。
我可以知道为什么下面的查询无效吗?

select * from shop where price = max(select price from shop);

我试图在shop表中获取maximum price列,因此在where子句中,我将价格与查询集中的maximum price进行比较。
我知道max的语法不允许这样做,但是max有什么理由不把queryset作为参数吗?

goucqfw6

goucqfw61#

等式右侧的表达式无效。 max() 是一个聚合函数,需要 select ed.那就是:

select * from shop where price = (select max(price) from shop);

这会让你排成一行 shop 有顶的 price ,包括扎带(如有)。
请注意,如果您不需要允许top ties,查询可以简化如下:

select * from shop order by price desc limit 1
czq61nw1

czq61nw12#

为什么这是无效的?原因有二:
第一, max() 不允许在 where 条款。其次,您有一个返回多个值的子查询——但是,这是不允许的,即使对于聚合函数也是如此。
这个 max() 需要进入子查询,将其转换为标量子查询—即返回一列和0或1行的子查询:

select s.*
from shop s
where s.price = (select max(s2.price) from shop s2);

如果只希望返回一行,则更简单的方法是:

select s.*
from shop s
order by s.price desc
limit 1;
gt0wga4j

gt0wga4j3#

你可以用其他方法:

select * from shop where price = (select max(price) from shop);

相关问题