MySQL ANY_VALUE() 函数使用指南
MySQL ANY_VALUE()
函数返回指定列中的任意一个值,它用在包含了 GROUP BY
的语句中,以抑制 ONLY_FULL_GROUP_BY
导致的错误。
ANY_VALUE()
语法
这里是 MySQL ANY_VALUE()
函数的语法:
ANY_VALUE(column_name)
参数
column_name
- 必需的。 一个列名。
返回值
MySQL ANY_VALUE()
函数返回指定列中的任意一个值。
ANY_VALUE()
示例
为了演示 ANY_VALUE()
函数的用法,让我们使用如下语句创建一个表 test_any_value
,它包含了 id
, user
, 和 address
三个列:
CREATE TABLE test_any_value (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
);
然后,让我们再插入几条数据:
INSERT INTO test_any_value (name, address)
VALUES
('Tom', 'Address 1 of Tom'),
('Tom', 'Address 2 of Tom'),
('Adam', 'Address of Adam');
让我们看一下表中的数据:
SELECT * FROM test_any_value;
+----+------+------------------+
| id | name | address |
+----+------+------------------+
| 1 | Tom | Address 1 of Tom |
| 2 | Tom | Address 2 of Tom |
| 3 | Adam | Address of Adam |
+----+------+------------------+
现在,我们想要统计每个人的地址的数量,并显示每个人的任意一个地址:
SELECT name,
COUNT(address) AS count,
address
FROM test_any_value
GROUP BY name;
当我们运行这个语句的时候,MySQL 返回了一个错误:”ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ’testdb.test_any_value.address’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by“。
这里,让我们使用 ANY_VALUE()
解决这个问题:
SELECT name,
COUNT(address) AS count,
ANY_VALUE(address) AS address
FROM test_any_value
GROUP BY name;
+------+-------+------------------+
| name | count | address |
+------+-------+------------------+
| Tom | 2 | Address 1 of Tom |
| Adam | 1 | Address of Adam |
+------+-------+------------------+
现在,MySQL 没有给出错误并返回了我们期望的结果。 这与在不使用 ANY_VALUE()
并将 ONLY_FULL_GROUP_BY
模式禁用掉的结果完全一样。