MySQL ANY_VALUE() Function
In MySQL, the ANY_VALUE()
function returns any value in the specified column. It is used in a GROUP BY
statement to suppress errors caused by ONLY_FULL_GROUP_BY
.
ANY_VALUE()
Syntax
Here is the syntax of the MySQL ANY_VALUE()
function:
ANY_VALUE(column_name)
Parameters
column_name
- Required. A column name.
Return value
The MySQL ANY_VALUE()
function returns any value in the specified column.
ANY_VALUE()
Examples
To demonstrate the usage of the ANY_VALUE()
function, let’s create a table test_any_value
with three columns id
, user
, and address
, using the following statement:
CREATE TABLE test_any_value (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
);
Then, let’s insert 3 rows into the table:
INSERT INTO test_any_value (name, address)
VALUES
('Tom', 'Address 1 of Tom'),
('Tom', 'Address 2 of Tom'),
('Adam', 'Address of Adam');
Let’s look at the rows in the table:
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 |
+----+------+------------------+
Now, we want to count the number of addresses for each name and display any address for each name:
SELECT name,
COUNT(address) AS count,
address
FROM test_any_value
GROUP BY name;
When we execute this statement, MySQL returned an error: “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”.
How to solve it? let’s use the ANY_VALUE()
function:
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 |
+------+-------+------------------+
Now, MySQL returned the rows we expected. This is exactly the same result as not using ANY_VALUE()
and disabling the ONLY_FULL_GROUP_BY
mode.