Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Agregando dados usando funções de grupo (agrupar por oráculo)


Como parte do tutorial de aprendizado do Oracle SQL, aqui estão bons detalhes sobre o grupo por oráculo

As funções de grupo, ao contrário das funções de valor único, operam no conjunto de linhas e retornam uma linha por grupo. O conjunto de linhas pode ser uma tabela inteira ou a tabela dividida em grupos

Os tipos de funções de grupo no Oracle incluem:

AVG([Distinto/todos]  n) Somente tipos de dados numéricos. O valor médio da coluna n ignorando valores nulos
COUNT({*/[Distinct/all]expr}) É apenas uma função de grupo que inclui valores nulos. Ele conta o número de linhas na instrução select que satisfaz a cláusula where. Count(*) inclui todos os valores nulos e duplicados
MAX([Distinto/todos] expr) Pode ser usado com qualquer tipo de dados. Dá o valor máximo de expr ignorando valores nulos
MIN([Distinto/todos] expr) Pode ser usado com qualquer tipo de dados. . Dá um valor mínimo de expr ignorando valores nulos
STDDEV([Distinto/todos]  n) Somente tipos de dados numéricos. Dá um desvio padrão de n ignorando valores nulos
SOMA ([Distinto/todos]  n) Somente tipos de dados numéricos e não podem ter outros operadores aritméticos na função. Ele fornece a soma de n ignorando valores nulos
VARIANCE([Distinto/todos]  n) Somente tipos de dados numéricos. Dá variância de n ignorando valores nulos

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

O servidor Oracle executou as seguintes etapas
  • Primeiro, as linhas são selecionadas com base na cláusula where
  • As linhas são agrupadas
  • A função de grupo é aplicada a cada grupo
  • O grupo que corresponde ao critério na cláusula de ter é exibido

Portanto, a cláusula WHERE é avaliada primeiro (restringe os resultados da consulta), depois a cláusula GROUP BY (agrupa os resultados de WHERE), depois a cláusula HAVING (restringe ainda mais os resultados, restringindo os grupos retornados).

Alguns pontos importantes sobre agrupar por oráculo


(1) GROUP BY:Decompõe os resultados das funções de grupo de uma grande tabela de dados em agrupamentos lógicos menores.

(2) A cláusula WHERE não pode restringir um grupo, então use a cláusula HAVING.

(3) Não use o alias de coluna na cláusula GROUP BY.

(4) HAVING:restringe a exibição de grupos àqueles que “têm” as condições especificadas.

(5) A função NVL permite que uma função GROUP BY inclua valores nulos em seu cálculo.

(6) Qualquer coluna ou expressão na lista de seleção que não seja uma função agregada deve estar na cláusula group by

Exemplos de funções de grupo no Oracle


Vamos primeiro criar as tabelas de exemplo e depois tentar o 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;

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

Múltiplas colunas
Select deptno ,job, sum(sal) from emp group by deptno,job

Função de contagem
SELECT dept, COUNT(*) AS "Np of employees" FROM emp WHERE sal < 15000
GROUP BY dept;

Função Mín.
SELECT dept, MIN(sal) AS "Lowest salary" FROM emp 
GROUP BY dept;

Espero que goste deste artigo

Artigos relacionados
Funções analíticas no oracle:as funções analíticas do Oracle calculam um valor agregado com base no grupo de linhas usando a cláusula over partition by oracle, elas diferem das funções agregadas
classificação no oracle:RANK, DENSE_RANK e ROW_NUMBER são oracle analíticos função que são usadas para classificar linhas no grupo de linhas chamado window
Função Lead no oracle :Confira a função LAG no Oracle e a função Lead no Oracle, como usá-las em consultas analíticas e como funciona no Oracle sql
Top-N Queries no Oracle:Confira esta página para explorar as várias maneiras de obter Top-N Queries no Oracle e Paginação no banco de dados oracle de consulta oracle.