gpt4 book ai didi

sql - 为什么 where 子句中不允许使用聚合函数

转载 作者:行者123 更新时间:2023-12-03 21:00:56 27 4
gpt4 key购买 nike

我正在寻求对此的澄清。我在下面写了两个查询:

我们有一张员工姓名表,其中包含 ID、姓名、薪水

  1.  Select name from employee 
where sum(salary) > 1000 ;

2. Select name from employee
where substring_index(name,' ',1) = 'nishant' ;

查询 1 不起作用,但查询 2 起作用。根据我的开发经验,我觉得可能的解释是:

The sum() works on a set of values specified in the argument. Here 'salary' column is passed , so it must add up all the values of this column. But inside where clause, the records are checked one by one , like first record 1 is checked for the test and so on. Thus sum(salary) will not be computed as it needs access to all the column values and then only it will return a value.



查询 2 的工作方式是 substring_index() 处理单个值,因此这里它处理提供给它的值。

你能验证我的理解吗?

最佳答案

不能使用的原因SUM()WHERE子句是子句的求值顺序。
FROM告诉您从何处读取行。当行从磁盘读取到内存时,检查 WHERE状况。 (实际上,在许多情况下,未通过 WHERE 子句的行甚至不会从磁盘读取。“条件”正式称为谓词,并且某些谓词 - 由查询执行引擎使用 - 来决定从基数读取哪些行表。这些被称为访问谓词。)如您所见,WHERE子句应用于呈现给引擎的每一行。

另一方面,只有在读取了所有行(验证所有谓词)之后,才会进行聚合。

想一想:SUM()仅适用于满足 WHERE 的行状况。如果你把 SUM()WHERE条款,你要求循环逻辑。新行是否通过 WHERE条款?我怎么会知道?如果它通过,那么我必须将它包含在 SUM 中,但如果不是,则不应包含在 SUM 中.那么我如何评估 SUM健康)状况?

关于sql - 为什么 where 子句中不允许使用聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42470849/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com