DISTINCT - GROUP BY

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP
Dulima

DBA Oracle Jr

Senhores...
Me deparei hj com as Seguintes Situações..

DISTINCT - GROUP BY

Qual a Diferença deles, pois os dois me Trazem o mesmo Resultado???
Se possivel, mencionar outra query...


Codigo1

Selecionar tudo

SELECT DISTINCT deptno
 FROM emp;
Codigo 2

Selecionar tudo

SELECT  deptno
 FROM emp group by deptno;

Valeu Galera..
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

seguindo este exemplo seu, eles não tem diferença mesmo...
mais se você tentar assim...

Selecionar tudo

SELECT DISTINCT deptno, ENAME
FROM emp
/
ou assim

Selecionar tudo

SELECT  deptno, ENAME
FROM emp group by deptno
/
vai ver qui não é o mesmo resultado mais....
e também qui o codigo 2 não funcionará....

o distinct ele trais o campos distintos, mais quando possui um valor diferente ele já trais outra linha...

o group by é uma coisa um pouco mais complicada, qui eu não vou conseguir explicar =D

mais eu vou procurar uma definição aqui e já posto.... =D
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP
Dulima

DBA Oracle Jr

entendo amigo...

mais se você colocar o Script Assim vai....

Selecionar tudo

SELECT  deptno, ENAME
FROM emp group by deptno, ename;
Ate onde eu Sei, todo GROUP BY precisa ter os Campos do Select...


Agradeço gokden a Colaboração ....
mais a Duvida perciste!!!
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

Sim mais a função do group by, é agrupar as linhas do select...

é qui faiz poco tempo qui eu intendi o group by =x
por isso qui não sei explicar muito bem...

até um tempo atrás eu montava o select e ia colocando os campos no group by até dar certo =D
vou postar o que eu achei aqui, ai você pode postar suas duvidas...
Criando Grupos de Dados: Cláusula GROUP BY

Selecionar tudo

SELECT		column, group_function(column)
FROM		table
[WHERE		condition]
[GROUP BY		group_by_expression]
[ORDER BY		expr];
Você pode utilizar a cláusula GROUP BY para dividir as linhas de uma tabela em grupos. Você pode então utilizar as funções de grupo para devolver informação sumarizada para cada grupo.

Sintaxe: group_by_expression especifica as colunas cujos valores determinam a base para o agrupamento das linhas.

Diretrizes
* Se você incluir uma função de grupo em uma cláusula SELECT, você não pode selecionar resultados individuais a menos que a coluna individual apareça na cláusula GROUP BY. Você receberá uma mensagem de erro caso não inclua a coluna na lista.
* Utilizando a cláusula WHERE, você pode excluir linhas antes de fazer a divisão dos grupos.
* Você deve incluir as colunas na cláusula GROUP BY.
* Você não pode utilizar o alias de uma coluna na cláusula GROUP BY.
* Por default, as linhas são classificadas em ordem ascendente das colunas incluídas na lista da cláusula GROUP BY. Você pode sobrepor esta ordenação utilizando a cláusula ORDER BY
.

Exemplo:

Selecionar tudo

SELECT	deptno, AVG(sal)
  FROM		emp
  GROUP BY	deptno;[/quote]
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP
Dulima

DBA Oracle Jr

Resumindo....

as Funções
Count
Sum
Max
AVG
....

So podem ser utilizadar com o TAL group by.....

e o distinct cria um "GRUPO" mais sem essas Funções...

CERTO????
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

pelo qui eu intendi....
o distinct, tansforma as linhas identicas em uma linha só

e o group by agrupa os campos quando você usa o SUM, AVG, MAX, MIN (funções de grupo) para você agrupar por alguma coisa...

ex: Eu quro saber a soma total do campo SAL da tabela EMP

Selecionar tudo

select sum(sal) from emp;
agora eu quero saber a soma do SAL de cada DEPTONO da tabela EMP. intendeu ??

Selecionar tudo

 select sum(sal), deptno from emp group by deptno;
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP
Dulima

DBA Oracle Jr

Entendi Cara....

Valeu....

Vou Brincar com esses comandos...

qualquer coisa eu posto....

valeu Mesmo!!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes