Jus*_*ner 8 mysql aggregate-functions
在以下示例中,为什么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值的比较.
那么aMySQL应该使用哪个值?我所知道的所有其他RDBMS都会在此时抛出错误,但MySQL确实允许这样做.来自文档
标准SQL不允许该
HAVING子句命名在GROUP BY子句中找不到的任何列,除非它包含在聚合函数中.MySQL允许使用这些列来简化计算.此扩展假定非组合列具有相同的分组值.否则,结果是不确定的.
所以在你的情况下你得到的结果似乎它最终1用作标量值,a但这种行为不能得到保证,它同样可以使用2或任何其他现有a值.
| 归档时间: | 
 | 
| 查看次数: | 731 次 | 
| 最近记录: |