如何在max函数里面使用select查询?[重复]

问题描述 投票:0回答:1

我想知道为什么下面这个查询无效?

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

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

我知道max的语法不允许这样做,但是max不以查询集为参数有什么原因吗?

mysql
1个回答
1
投票

等式右边的表达式是无效的。max() 是一个集合函数,需要 selected. 这将是。

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

这就给了你几行 shop 拔尖 price如果有的话,还包括连带关系。

请注意,如果你不需要允许顶部连接,查询可以简化如下。

select * from shop order by price desc limit 1

2
投票

为什么这个查询无效? 有两个原因。

第一, 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;

1
投票

你可以反过来做

select * from shop where price = (select max(price) from shop);
© www.soinside.com 2019 - 2024. All rights reserved.