我希望你能澄清这个问题。以下是我写的两个查询:
我们有一个员工姓名表格,包含 ID、姓名和薪水列。
1. Select name from employee
where sum(salary) > 1000 ;
2. Select name from employee
where substring_index(name,' ',1) = 'nishant' ;
查询 1 不起作用,但查询 2 起作用。根据我的开发经验,我感到可能的解释是:
sum() 函数在指定的参数值集合上运行。在此处传递了“salary”列,因此它必须将该列的所有值相加。但在 where 子句内部,记录会逐个检查,例如首先检查测试的第一条记录,然后一次类推。因此,sum(salary) 将不会被计算,因为它需要访问所有列值,然后才能返回一个值。
查询 2 起作用是因为 substring_index() 函数在单个值上运行,因此它在提供给它的值上工作。
请问我的理解是否正确?
having
子句中使用它们。 - Gurwinder SinghHAVING
子句中使用,而不能在WHERE
子句中使用?是否有一些逻辑上的原因导致它们不能出现在WHERE
子句中?” - user5683823where sal = max(sal)
或where sal > avg(sal)
那样有一个where
子句(即使没有group by
子句-将所有行放入一个分组)。如我所解释的,原因在于这将需要循环推理,因为max
和avg
不适用于基表中的所有行; 它们仅适用于满足where
条件的行!如果您需要整个基表的max
或avg
,则必须在子查询中单独计算。 - user5683823