Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 这段SQL代码如何选择最便宜的两种水果?_Mysql_Sql - Fatal编程技术网

Mysql 这段SQL代码如何选择最便宜的两种水果?

Mysql 这段SQL代码如何选择最便宜的两种水果?,mysql,sql,Mysql,Sql,我有我从中得到的SQL代码。我无法理解它是如何工作的 SELECT type, variety, price FROM fruits WHERE ( SELECT COUNT(*) FROM fruits AS f WHERE f.type = fruits.type AND f.price <= fruits.price ) <= 2 该表可以在上面提到的链接中找到,也可以单击,代码也可以在该链接中找到。首先,它不存在。要获得最昂贵的

我有我从中得到的SQL代码。我无法理解它是如何工作的

SELECT type, variety, price
FROM fruits
WHERE ( SELECT COUNT(*) 
        FROM fruits AS f
        WHERE f.type = fruits.type AND f.price <= fruits.price
      ) <= 2

该表可以在上面提到的链接中找到,也可以单击,代码也可以在该链接中找到。首先,它不存在。要获得最昂贵的,子查询需要f.price>=fruits.price。这是最便宜的。但让我假设你的意图

它实现的逻辑非常复杂。但以下是一些场景:

如果给定类型的两种最昂贵的水果具有独特的价格,那么它会满足您的需求。 如果正好有两种水果价格最高,那么它们就会被退回。 如果3个或3个以上的水果对给定类型来说是最昂贵的,那么它将不返回任何结果。 有更好的方法来表达这种逻辑,根据实际意图,使用密集的秩或行数

查询是如何工作的?子查询是一个相关子查询。考虑它的方式是,对于外部查询中的每一行,都运行内部查询。内部查询是根据价格条件计算相同类型的水果的数量——价格相同或更高的数量。请注意,SQL引擎可能使用不同的执行计划

假设如果子查询返回1,则该行是最高价格。然而,这一假设取决于基础数据


正如我所说,这真是一个可怕的方式来完成这一逻辑。学习窗口功能。并使用不同的示例来了解相关子查询。

a效率不高,b只选择两个或两个以下水果的水果,包括它们自己的价格拼写相同或更低?是的,我误解了,我会立即更正问题!