Mysql SQL,其中包含日期函数

Mysql SQL,其中包含日期函数,mysql,sql,where,having,Mysql,Sql,Where,Having,我不明白为什么我们可以在日期函数中使用WHERE子句。举个例子吧 SELECT name FROM table1 WHERE DATEDIFF(year1,year2) < 10; 从表1中选择名称 其中DATEDIFF(year1,year2)

我不明白为什么我们可以在日期函数中使用WHERE子句。举个例子吧

SELECT name FROM table1
WHERE DATEDIFF(year1,year2) < 10;
从表1中选择名称
其中DATEDIFF(year1,year2)<10;

以及它的工作原理。我认为我们不能使用带有函数的WHERE。为此,我们应该使用HAVING子句。那么这是怎么回事呢?日期函数是否与最大值、最小值、平均值等不同

不能在
WHERE
子句之后使用聚合函数,因为它没有意义,而
DATEDIFF
是可用的。这毫无意义,因为这就像告诉计算机:

选择id列的最大值为34的所有行

这听起来可能有点逻辑,但实际上并非如此,实际上与
id<35
相同。第二种方式也更加清晰

真正的问题是,计算选择中列的最大值需要已经进行选择。因此,
MAX
不能用作实际选择要计算的行的条件

至于
DATEDIFF
,它之所以有效,是因为由此产生的问题对于计算机来说是合乎逻辑的:

选择date1和date2之间的差值小于10的所有行


不能在
WHERE
子句中使用函数是不正确的。您可以在其中放入几乎任何内容(聚合除外),只要它根据相关表的列或常量表达式计算为逻辑true/false条件<另一方面,代码>拥有除了支持所有其他功能外,还支持聚合

两者之间的区别在于执行时,当您使用
groupby
时,它是相关的
首先是
,它规定了可以使用所有相关表中的行来形成组的条件,而不满足该条件的行将不会被考虑到聚合中。您可以考虑在分组之前处理原始表数据的
<代码>HAVING
在组已经形成并计算聚合(这就是为什么您可以在这里使用它们)并决定允许在最终查询结果中显示哪些最终组之后进行评估


它们都在不同的时间和不同的数据集上运行。请注意,当没有
分组依据时,
WHERE
have
是等效的。

谁告诉您不应该在WHERE子句中使用函数?聚合函数
(MAX,MIN,AVG)
肯定与
日期函数不同。您不能在
where子句中使用聚合函数。好的,所以我们只需要查看聚合函数。mysql的合适列表在哪里?