[英]MySQL aggregate function problem
在下面的示例中,为什么min()
查询返回结果,但max()
查询不返回结果?
mysql> create table t(id int, a int);
Query OK, 0 rows affected (0.10 sec)
mysql> insert into t(id, a) values(1, 1);
Query OK, 1 row affected (0.03 sec)
mysql> insert into t(id, a) values(1, 2);
Query OK, 1 row affected (0.02 sec)
mysql> select * from t
-> ;
+------+------+
| id | a |
+------+------+
| 1 | 1 |
| 1 | 2 |
+------+------+
2 rows in set (0.00 sec)
mysql> select * from t where a < 4;
+------+------+
| id | a |
+------+------+
| 1 | 1 |
| 1 | 2 |
+------+------+
2 rows in set (0.00 sec)
mysql> select * from t where a < 4 having a = max(a);
Empty set (0.00 sec)
mysql> select * from t where a < 4 having a = min(a);
+------+------+
| id | a |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)
HAVING
子句用于过滤行组。 您引用min(a)
和max(a)
其(在不存在任何的GROUP BY
子句)聚合在所有a
表中的值,但是然后使用针对单一的比较a
值。
因此,这a
值的MySQL应该使用? 我所知道的所有其他RDBMS都会在此时抛出错误,但MySQL确实允许这样做。 来自文档
标准SQL不允许
HAVING
子句命名GROUP BY
子句中找不到的任何列,除非它包含在聚合函数中。 MySQL允许使用这些列来简化计算。 此扩展假定非组合列具有相同的分组值。 否则,结果是不确定的。
所以你的情况从结果你得到看来,它结束了使用1
作为标量值a
但这种行为并不能完全保证其可以等效地使用2
或任何其他现有的a
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.