Ah, tem um detalhe... Eu simplifiquei demais o exemplo =P

Eu quero distinct por dois campos... Pq é assim..

Eu tenho um estabelecimento.. Ele pode ser destaque ou não.. Se for
destaque, eu tenho que exibir ele duas vezes... E cada estabelecimento pode
ter uma ou mais classificações...

Então eu fiz:

select
*
from
(select estab_id, nome, destaque from estabelecimento where destaque = 1
 union all
 select estab_id, nome, 0 from estabelecimento
) estab,
inner join classificacao on ( estab_id = classi_id )

vai retornar algo como

nome, destaque, classi_id
Estab1,1,1
Estab1,1,2
Estab1,0,1
Estab1,0,2
Estab2,0,3
Estab2,0,4
Estab3,0,5

Se eu quiser mostrar por classificação, eu não faço nenhum group by e faço
count(estab_id)...

O problema é se eu quiser mostrar por Estabelecimento...
Eu preciso fazer "group by Estab_id,destaque".. Assim eu fico com os grupos:
1,1
1,0
2,0
3,0

Se eu faço count(estab_id) ele me retorna:
2
2
2
1
Ou seja, me diz quantos dados tem em cada grupo...

Se eu faço count(distinct(estab_id)) ele me retorna:
3

Pois ele não considera o Estab1 com destaque diferente do Estab1 sem
destaque...


O jeito que eu achei aqui foi criar um campo novo, concatenando os campos
estab_id e destaque separados por virgula... assim, quando faço distinct
nesse campo, ele analisa como:
1,1
1,0
2,0
3,0
E me retorna "4", como eu quero...

É esse o melhor jeito mesmo, já que não tem como fazer
distinct(campo1,campo2)??






2009/7/17 André Volpato <[email protected]>

> Wagner Bonfiglio escreveu:
> > Olá senhores...
> >
> > Me deparei com um problema que parece primário, mas fiquei indignado
> > por não conseguir resolver...
> >
> > Eu tenho um Group By e quero saber o número de "grupos" que retornou...
> >
> > Algo como:
> >
> > A | B
> > --------
> > 0 | a
> > 0 | b
> > 0 | c
> > 0 | d
> > 1 | e
> > 1 | f
> > 1 | g
> > 1 | h
> >
> > Select a, count(*) from tabela group by a;
> >
> > a | count
> > -------------
> > 0 | 4
> > 1 | 4
> >
> > Até aqui blz...
> >
> > Mas como eu faço para ele me dizer que retornou 2 "grupos"?
> >
> > Com: "select count(*) from tabela group by a" eu achei que resolveria,
> > mas ele retorna o mesmo do passado, mas sem a coluna a, somento "4" e
> > "4"...
> >
> > Cheguei a fazer uma coisa feia, mas que funcionava =P
> >
> > select count(*) from (select count(*) from tabela group by a) x
> >
> > Alguma outra sugestão?
> >
>
> select count(distinct(a)) from tabela
>
> []´s
> ACV
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a