La función ANY_VALUES en PostgreSQL consigue agregar un campo no agregable (campo no numérico). Gracias a esto consigues no tener que agregar el campo no agregable al group by y en muchos casos se gana tiempo de ejecución. La función ANY_VALUES está englobada en las denominadas funciones de agregación.
Tabla de Contenidos
ocultar
Sintaxis
La sintaxis de la función ANY_VALUES es la siguiente:
select any_value ( anyelement )
from tabla;
Ejemplos
Usaremos la siguiente tabla llamada empleados para realizar los ejemplos (al final de la página está disponible el script para crearla)
![](https://www.migueltroyano.com/wp-content/uploads/2022/03/postgresql_ejemplo_tabla-1.jpg)
Ejemplo básico
En el siguiente ejemplo obtenemos la media de sueldos de la tabla empleados sin incluir el puesto en el group by:
SELECT nombre, any_value(puesto), sum(sueldo)
from empleados
group by nombre;
![](https://www.migueltroyano.com/wp-content/uploads/2024/01/postgresql_funcion_any_value.png)
Ejemplo completo
Copia y pega el siguiente código en tu consola de PostgreSQL y realiza paso a paso leyendo los comentarios:
-- Borramos la tabla si existe
drop table if exists empleados;
-- Creamos la tabla
create table empleados
(
id_empleado numeric(2,0),
id_departamento numeric(2,0),
nombre character varying(50),
puesto character varying(50),
fecha_alta date,
sueldo integer
);
-- Insertamos valores
insert into empleados
values (1,1,'Miguel Troyano','Analista','26/09/1986',60000),
(2,1,'Ismael Troyano','Analista','01/01/2001',60000),
(3,1,'Jose Troyano','Alta Dirección','01/01/2001',80000),
(4,1,'Pilar Redondo','Alta Dirección','02/02/2002',80000);
-- Mostramos la media del sueldo de la tabla empleados por nombre y puesto
SELECT nombre, any_value(puesto), sum(sueldo)
from empleados
group by nombre;