DISTINCT - GROUP BY

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qua, 05 Mar 2008 4:15 pm

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
Código: Selecionar todos
SELECT DISTINCT deptno
FROM emp;


Codigo 2

Código: Selecionar todos
SELECT  deptno
FROM emp group by deptno;



Valeu Galera..
Dulima-SP
Localização: SP

Dulima

DBA Oracle Jr

Mensagemem Qua, 05 Mar 2008 4:46 pm

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

Código: Selecionar todos
SELECT DISTINCT deptno, ENAME
FROM emp
/


ou assim
Código: Selecionar todos
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
gokden
Localização: Ribeirão Preto - SP

Lucas de Souza

OCA Developer
Analista de sistemas

Mensagemem Qua, 05 Mar 2008 4:56 pm

entendo amigo...

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

Código: Selecionar todos
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!!!
Dulima-SP
Localização: SP

Dulima

DBA Oracle Jr

Mensagemem Qua, 05 Mar 2008 5:01 pm

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

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:
SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno;
gokden
Localização: Ribeirão Preto - SP

Lucas de Souza

OCA Developer
Analista de sistemas

Mensagemem Qua, 05 Mar 2008 5:16 pm

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????
Dulima-SP
Localização: SP

Dulima

DBA Oracle Jr

Mensagemem Qua, 05 Mar 2008 5:54 pm

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
Código: Selecionar todos
select sum(sal) from emp;


agora eu quero saber a soma do SAL de cada DEPTONO da tabela EMP. intendeu ??

Código: Selecionar todos
select sum(sal), deptno from emp group by deptno;
gokden
Localização: Ribeirão Preto - SP

Lucas de Souza

OCA Developer
Analista de sistemas

Mensagemem Qua, 05 Mar 2008 6:01 pm

Entendi Cara....

Valeu....

Vou Brincar com esses comandos...

qualquer coisa eu posto....

valeu Mesmo!!
Dulima-SP
Localização: SP

Dulima

DBA Oracle Jr



Voltar para SQL

Quem está online

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