摘要:在本教程中,您将学习如何使用 SQL ANY_VALUE() 聚合函数从一个组中选择任意一个值。
SQL ANY_VALUE 聚合函数简介 #
在 SQL 中,ANY_VALUE 聚合函数从一组值中返回任意一个值。
与其他聚合函数(如返回特定值的 MIN 或 MAX)不同,ANY_VALUE 从一组值中选取一个值,但不保证返回哪一个。
在实践中,您会发现在返回值与分组无关的查询中,ANY_VALUE 非常有用。
以下是 ANY_VALUE 函数的语法:
ANY_VALUE(expression)Code language: SQL (Structured Query Language) (sql)在此语法中,expression 可以是您希望返回任意值的表列或表达式。
SQL ANY_VALUE 函数示例 #
我们将使用来自HR 示例数据库的 employees 和 departments 表。

查询部门及各部门中的任意一名员工 #
以下查询使用 ANY_VALUE 聚合函数返回由 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)输出
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)结果集包含 department_id 列的值和 first_name 列的任意值。
您可以使用 inner join 子句将 employees 表与 departments 表连接起来,以包含部门名称。
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)输出
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)查询高薪组中的员工信息 #
以下查询将员工按高薪和低薪分组,并为每个组选择一名任意员工的姓名:
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)输出
salary_group | employee
--------------+-----------
High Salary | Steven
Low Salary | AlexanderCode language: SQL (Structured Query Language) (sql)摘要 #
- 使用
ANY_VALUE聚合函数从一组值中选择一个任意值。
本教程是否有帮助?