这个问题在这里已经有答案了:
如何在mysql表中选择最大值行(7个答案)11个月前关门了。我可以知道为什么下面的查询无效吗?
select * from shop where price = max(select price from shop);
我试图在shop表中获取maximum price列,因此在where子句中,我将价格与查询集中的maximum price进行比较。我知道max的语法不允许这样做,但是max有什么理由不把queryset作为参数吗?
goucqfw61#
等式右侧的表达式无效。 max() 是一个聚合函数,需要 select ed.那就是:
max()
select
select * from shop where price = (select max(price) from shop);
这会让你排成一行 shop 有顶的 price ,包括扎带(如有)。请注意,如果您不需要允许top ties,查询可以简化如下:
shop
price
select * from shop order by price desc limit 1
czq61nw12#
为什么这是无效的?原因有二:第一, max() 不允许在 where 条款。其次,您有一个返回多个值的子查询——但是,这是不允许的,即使对于聚合函数也是如此。这个 max() 需要进入子查询,将其转换为标量子查询—即返回一列和0或1行的子查询:
where
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;
gt0wga4j3#
你可以用其他方法:
3条答案
按热度按时间goucqfw61#
等式右侧的表达式无效。
max()
是一个聚合函数,需要select
ed.那就是:这会让你排成一行
shop
有顶的price
,包括扎带(如有)。请注意,如果您不需要允许top ties,查询可以简化如下:
czq61nw12#
为什么这是无效的?原因有二:
第一,
max()
不允许在where
条款。其次,您有一个返回多个值的子查询——但是,这是不允许的,即使对于聚合函数也是如此。这个
max()
需要进入子查询,将其转换为标量子查询—即返回一列和0或1行的子查询:如果只希望返回一行,则更简单的方法是:
gt0wga4j3#
你可以用其他方法: