sql >> Base de Datos >  >> RDS >> Oracle

Agregación de datos mediante funciones de grupo (grupo por oráculo)

Como parte del tutorial de aprendizaje de Oracle SQL, aquí hay buenos detalles sobre el grupo de Oracle

Las funciones de grupo, a diferencia de las funciones de valor único, operan en el conjunto de filas y devuelven una fila por grupo. El conjunto de filas puede ser una tabla completa o la tabla dividida en grupos

Los tipos de funciones de grupo en Oracle incluyen:

PROMEDIO([Distintas/todas]  n) Solo tipos de datos numéricos. El valor promedio de la columna n ignorando los valores nulos
COUNT({*/[Distinct/all]expr}) Es solo una función de grupo que incluye valores nulos. Cuenta el número de filas en la declaración de selección que satisface la cláusula where. Count(*) incluye todos los valores nulos y duplicados
MAX([Distinto/todos]  expr) Se puede usar con cualquier tipo de datos. Da el valor máximo de expr ignorando los valores nulos
MIN([Distinto/todos]  expr) Se puede usar con cualquier tipo de datos. . Da un valor mínimo de expr ignorando los valores nulos
STDDEV([Distinto/todos]  n) Solo tipos de datos numéricos. Da una desviación estándar de n ignorando los valores nulos
SUMA ([Distintas/todas]  n) Solo tipos de datos numéricos y no pueden tener otros operadores aritméticos en la función. Proporciona la suma de n ignorando los valores nulos
VARIANZA([Distintas/todas]  n) Solo tipos de datos numéricos. Da la varianza de n ignorando los valores nulos

Sintaxis:

SELECT col1, col2, … col_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY col1, col2, … col_n
Having group condition;

El servidor de Oracle realizó los siguientes pasos

  • Primero, las filas se seleccionan según la cláusula where
  • Las filas están agrupadas
  • La función de grupo se aplica a cada grupo
  • Se muestra el grupo que coincide con el criterio en la cláusula que tiene

Entonces, la cláusula WHERE se evalúa primero (restringe los resultados de la consulta), luego la cláusula GROUP BY (agrupa los resultados de WHERE), luego la cláusula HAVING (restringe aún más los resultados, restringiendo los grupos devueltos).

Algunos puntos importantes sobre Group by Oracle

(1) GROUP BY:desglosa los resultados de las funciones de grupo de una gran tabla de datos en agrupaciones lógicas más pequeñas.

(2) La cláusula WHERE no puede restringir un grupo, así que use la cláusula HAVING.

(3) No utilice el alias de columna en la cláusula GROUP BY.

(4) HAVING:restringe la visualización de grupos a aquellos que "tienen" las condiciones especificadas.

(5) La función NVL permite que una función GROUP BY incluya valores nulos en su cálculo.

(6) Cualquier columna o expresión en la lista de selección que no sea una función agregada debe estar en la cláusula group by

Ejemplos de funciones de grupo en Oracle

Primero creemos las tablas de muestra y luego probemos el grupo por Oracle sql

CREATE TABLE "DEPT"
( "DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13),
CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
)
CREATE TABLE "EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "DEPT" ("DEPTNO") ENABLE
);
insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept values(20, 'RESEARCH', 'DALLAS');
insert into dept values(30, 'RESEARCH', 'DELHI');
insert into dept values(40, 'RESEARCH', 'MUMBAI');
insert into emp values( 7698, 'Blake', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 );
insert into emp values( 7782, 'Clark', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 2450, null, 10 );
insert into emp values( 7788, 'Scott', 'ANALYST', 7566, to_date('9-6-2012','dd-mm-yyyy'), 3000, null, 20 );
insert into emp values( 7789, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 3000, null, null );
insert into emp values( 7560, 'T1OM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, 20 );
insert into emp values( 7790, 'TOM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, null );
commit;
Select * from emp;

Columna única

Select dept , avg(sal)   from emp  group by dept;

Columna Múltiple

Select deptno ,job, sum(sal) from emp group by deptno,job

Función de conteo

SELECT dept, COUNT(*) AS "Np of employees" FROM emp WHERE sal < 15000
GROUP BY dept;

Función mínima

SELECT dept, MIN(sal) AS "Lowest salary" FROM emp 
GROUP BY dept;

Espero que les guste este artículo

Artículos relacionados
Funciones analíticas en Oracle:las funciones de Oracle Analytic calculan un valor agregado basado en un grupo de filas mediante el uso de la partición por cláusula de Oracle, difieren de las funciones agregadas
rango en Oracle:RANK, DENSE_RANK y ROW_NUMBER son analíticos de Oracle función que se utilizan para clasificar filas en el grupo de filas llamado ventana
Función principal en Oracle:consulte la función LAG en Oracle y la función principal en Oracle, cómo usarlas en consultas analíticas y cómo funciona en Oracle sql
Consultas Top-N en Oracle:Consulte esta página para explorar las diversas formas de lograr Consultas Top-N en Oracle y Paginación en Oracle Query Oracle Database.