Re: [pgbr-geral] Como fazer esta consulta?

2008-06-26 Por tôpico William Leite Araújo
2008/6/26 Wagner Bonfiglio [EMAIL PROTECTED]:
(...)


 E quanto a consulta.. Esse SELECT COUNT(*) .. vai acabar somando o
 número total de entradas, eu quero que seja group by o rowid do
 usuário Para ver quantas entradas CADA USUÁRIO tem, somando as 3
 tabelas...


Uma forma é a seguinte:

   *SELECT* sum(count), ROWID
   *FROM*
(*SELECT* count(1),ROWID *FROM* usuarios *LEFT JOIN* conteudo1 *ON* (rowid =
idusuario) *GROUP BY* ROWID) C1
*JOIN*
(SELECT count(1),ROWID *FROM* usuarios *LEFT JOIN* conteudo2 *ON* (rowid =
idusuario) *GROUP BY* ROWID) C2 *USING*(ROWID)
*JOIN*
(*SELECT* count(1),ROWID* FROM* usuarios *LEFT JOIN* conteudo3 *ON* (rowid =
idusuario) *GROUP BY* ROWID) C3 USING(ROWID)
   *GROUP BY* ROWID



-- 
William Leite Araújo
Analista de Banco de Dados - QualiConsult
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Como fazer esta consulta?

2008-06-26 Por tôpico Leandro DUTRA
2008/6/26 Wagner Bonfiglio [EMAIL PROTECTED]:
 Desculpa a ignorância, mas como assim chaves de verdade

Números seqüenciais não podem ser a única chave, visto que permitem
duplicação de dados.

 transforme rowid num CREATE DOMAIN??

Use DOMAINs para manter consistência no modelo; isso te ajudará a ver
que, se você realmente é obrigado a ter números seqüenciais como
chaves, eles entretanto têm de ter nomes significativos, nem que seja
id_nome_da_tabela ou coisa assim.


 E quanto a consulta.. Esse SELECT COUNT(*) .. vai acabar somando o
 número total de entradas, eu quero que seja group by o rowid do
 usuário Para ver quantas entradas CADA USUÁRIO tem, somando as 3
 tabelas...

Perfeito, então faça o GROUP BY externo.


-- 
skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra
+55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED]
+55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803
+55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED]
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Como fazer esta consulta?

2008-06-26 Por tôpico Adriano Espinoza de Oliveira
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


[pgbr-geral] Como fazer esta consulta?

2008-06-25 Por tôpico Wagner Bonfiglio
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


Re: [pgbr-geral] Como fazer esta consulta?

2008-06-25 Por tôpico Leandro DUTRA
2008/6/25 Wagner Bonfiglio [EMAIL PROTECTED]:
 Tenho uma tabela de clientes com as colunas ROWID e NOME...

Primeira coisa: tenha chaves de verdade.  Se nome não pode ser chave,
ao menos transforme rowid num CREATE DOMAIN com um nome mais
significativo.

Depois:

 SELECT COUNT (*)
 FROM (SELECT ... UNION SELECT ... UNION ...)

-- 
skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra
+55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED]
+55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803
+55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED]
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral