Re: [pgbr-geral] Como fazer esta consulta?
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/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?
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?
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/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