Eu faria assim:

select
  usu.rowid, usu.nome, sum(q1.rank) as rank
from
  (
  select
    c1.idusuario, count(c1.idusuario) as rank from counteudo1 group by
c1.idusuario
  union all
  select
    c2.idusuario, count(c2.idusuario) as rank from counteudo2 group by
c2.idusuario
  union all
  select
    c3.idusuario, count(c3.idusuario) as rank from counteudo3 group by
c3.idusuario
  ) q1
join usuarios usu
on usu.rowid = q1.idusuario
group by usu.rowid, usu.nome
order by rank desc
limit 10

[]´s Adriano






( count(C1.idusuario) + count(C2.idusuario) +
count(C3.idusuario) ) AS RANK
FROM
usuarios USU LEFT OUTER JOIN conteudo1 C1 ON
(USU.rowid = C1.idusuario)
LEFT OUTER JOIN conteudo2 C2 ON ( USU.rowid = C2.idusuario )
LEFT OUTER JOIN conteudo3 C3 ON ( USU.rowid = C3.idusuario )
GROUP BY
USU.rowid, USU.nome, C1.idusuario, C2.idusuario, C2.idusuario
ORDER BY RANK DESC
LIMIT 10;


2008/6/25 Wagner Bonfiglio <[EMAIL PROTECTED]>:

> Seguinte.... Eu estou tentando fazer uma consulta que retorna o número
> de participações de um cliente no meu site...
>
> Vou abstrair um pouco, mas é mais ou menos isso
>
> Tenho uma tabela de clientes com as colunas ROWID e NOME...
>
> Tenho três outras tabelas, cada uma tem ROWID, IDUSUARIO, CONTEUDO..
> Sendo IDUSUARIO chave estrangeira para o ROWID da tabela de cliente...
>
> Supondo que um cliente pode ter entradas nas três tabelas, em duas, em
> apenas uma ou até em nenhuma.
>
> Gostaria de saber quantas entradas cada usuário tem, somando as
> entradas nas 3 tabelas...
>
> Ou seja, a saída seria algo como:
>
> NOME (ou ROWID) | COUNT(*)
> -----------------------------+-----------------
>  joao (ou 1)             | 97
>  mario (ou 5)           | 90
>  wagner (ou 10)       | 38
>
>
> Bom, acho que deu pra entender a idéia...
>
> Alguém sabe como consigo fazer isso?
> Já tentei usando LEFT OUTER JOIN e não consegui... A consulta que eu fiz
> foi:
>
> SELECT USU.rowid, USU.nome,
> ( count(C1.idusuario) + count(C2.idusuario) +
> count(C3.idusuario) ) AS RANK
> FROM
> usuarios USU LEFT OUTER JOIN conteudo1 C1 ON
> (USU.rowid = C1.idusuario)
> LEFT OUTER JOIN conteudo2 C2 ON ( USU.rowid = C2.idusuario )
> LEFT OUTER JOIN conteudo3 C3 ON ( USU.rowid = C3.idusuario )
> GROUP BY
> USU.rowid, USU.nome, C1.idusuario, C2.idusuario, C2.idusuario
> ORDER BY RANK DESC
> LIMIT 10;
>
>
> Valeu...
>    Wagner Mariotto Bonfiglio
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a