SQL ANY_VALUE Function

Summary: in this tutorial, you’ll learn how to use the SQL ANY_VALUE() aggregate function to select any value from a group.

Introduction to the SQL ANY_VALUE Aggregate Function #

In SQL, the ANY_VALUE aggregate function returns any value from a set of values.

Unlike other aggregate functions like MIN or MAX , which returns a specific value, the ANY_VALUE picks one value from a set without guaranteeing which one it returns.

In practice, you’ll find the ANY_VALUE useful in queries where the return value is irrelevant to the grouping.

Here’s the syntax of the ANY_VALUE function:

ANY_VALUE(expression)Code language: SQL (Structured Query Language) (sql)

In this syntax, the expression can be a table column or expression you want to return any value.

SQL ANY_VALUE function examples #

We’ll use the employees and departments tables from the HR sample database:

SQL ANY_VALUE Aggregate Function - Employees & Departments Tables

Selecting departments and any employee in each department #

The following query uses the ANY_VALUE aggregate function to return any employee in each department specified by department_id:

SELECT
  department_id,
  ANY_VALUE (first_name)
FROM
  employees
GROUP BY
  department_id
ORDER BY
  department_id;Code language: SQL (Structured Query Language) (sql)

Try it

Output:

 department_id | any_value
---------------+-----------
             1 | Jennifer
             2 | Michael
             3 | Shelli
             4 | Susan
             5 | Payam
             6 | David
             7 | Hermann
             8 | Jack
             9 | Steven
            10 | Luis
            11 | ShelleyCode language: SQL (Structured Query Language) (sql)

The result set includes the values from the department_id column and any value from the first_name column.

You can use the inner join clause to join the employees table with the departments table to include the department name.

SELECT
  department_name,
  ANY_VALUE (first_name) employee
FROM
  employees e
  INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
  department_name
ORDER BY
  department_name;Code language: SQL (Structured Query Language) (sql)

Try it

Output:

 department_name  | employee
------------------+----------
 Accounting       | William
 Administration   | Jennifer
 Executive        | Lex
 Finance          | Daniel
 Human Resources  | Susan
 IT               | Diana
 Marketing        | Pat
 Public Relations | Hermann
 Purchasing       | Sigal
 Sales            | Jack
 Shipping         | MatthewCode language: SQL (Structured Query Language) (sql)

Selecting employee information in high-salary groups #

The following query groups employees into high and low salaries and selects an arbitrary employee’s name for each group:

SELECT
  CASE
    WHEN salary > 10000 THEN 'High Salary'
    ELSE 'Low Salary'
  END AS salary_group,
  ANY_VALUE (first_name) AS employee
FROM
  employees
GROUP BY
  CASE
    WHEN salary > 10000 THEN 'High Salary'
    ELSE 'Low Salary'
  END;Code language: SQL (Structured Query Language) (sql)

Try it

Output:

 salary_group | employee
--------------+-----------
 High Salary  | Steven
 Low Salary   | AlexanderCode language: SQL (Structured Query Language) (sql)

Summary #

  • Use the ANY_VALUE aggregate function to select a arbitrary value from a set of values..
Was this tutorial helpful ?