Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

notax

para montar query com count

Recommended Posts

Bom dia.

 

Será que alguém me ajuda a montar uma query para exibir na tela tipo um ranking dos 30 mais?

 

O que eu preciso é o seguinte: tenho no meu bd uma tabela que insere o id do produto sempre que o produto é clicado.

 

Agora eu quero exibir em tela os 30 mais clicados...

 

A tabela está assim:

 

codigo (autonum) | id (id do produto)

 

então exemplo:

 

impressora

carro

calculadora

carro

impressora

impressora

 

ou seja:

impressora teve 3 cliques

carro teve 2 cliques

calculadora teve 1 clique

 

Equeria imprimir em tela uma tabela assim:

 

Produto | qtde de clique

impressora >> 3

carro >> 2

calculadora >> 1

 

Só que dos 30 mais clicados e em ordem do mais clicado pro menos clicado...

 

Será que eu alguém me da uma ideia de como fazer a query?

 

Não to conseguindo... eu sei usar o count... mas não sei ordenar pelo count...

 

Acho que tb teria que usar o group by e o order by... talvés a minha maior dificuldade aqui seja com o order by, visto que o dado é uma variável e não um campo da tabela... enfim... perdidaço!

 

valewzaço pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites


select

*

From

(select p.nome, (Select count(*) From tb_produto_clicado c Where c.idProduto = p.id ) as quantidade From produto p )

Order By

quantidade desc

essa é uma das formas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bah, valew o retorno mas desculpa cara não entendi nada!

 

Na verdade coloquei a pergunta de uma forma mais simples, mas acho que é um pouco mais complicadinho... lembrando que o meu BD é access...

 

mas assim, vamos pro caso real ok?

 

São quatro tabelas (legenda: Nome Tabela: campo1 || campo2...):

 

participantes: codigo || perfil

avatar: id || avatar

cics: id || cics

log: cics

 

 

 

Quero mostrar em tela da seguinte forma:

avatar || perfil || cics || qtde de cliques

 

Sendo que quantidade de cliques é o somatório dos cics lá da tab log, ou seja, do maior para o menor...

 

Problema 1:

Então o que eu preciso é comparar o codigo da tab participantes com o id da avatar e o id da cics e depois comparar o cics da cics com o cics da log e imprimir em tela de acordo com os que mais aparecem da tab log pros que menos aparecem numerando direitinho...

 

um exemplo ficaria assim:

 

foto1 || perfil1 || cics1 || 15

foto2 || perfil2 || cics2 || 7

foto3 || perfil3 || cics3 || 1

 

Problema 2:

Detalhe importante: pode acontecer de ter um cics sem avatar e sem perfil... ou seja, o id dele é 0 (zero), e não terá correspondencias nas tabs avatar e participantes, no entanto quero os imprimir em tela tb só que daí queria imprimir em tela como o exemplo abaixo:

 

foto1 || perfil1 || cics1 || 15

Foto Padrão || Anônimo || cics7 || 13

foto2 || perfil2 || cics2 || 7

foto3 || perfil3 || cics3 || 1

 

Será que consegui me explicar? acho que a coisa é mais complicada do que parece não?

 

Mas enfim... qq ajuda é muito bem vinda... to perdidaço nisso mesmo... não faço ideia de como resolver

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uhm... desculpe voltar a incomodar...

 

Tentei fazer hoje a tarde inteira e nada...

 

Jonathan, se você puder comentar o seu codigo te agradeceria muito, pq acho que ele tem como me ajudar... mas não entendi direito o que são aqueles "p" e "c"

 

algo tipo uma legenda... pq tentei aplicar ele aqui e não consegui...

 

Valewzaço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usado em conjunto com o comando SELECT para contar todas as linhas de uma tabela ou as colunas que casem com uma condição especificada (que excluam ou incluam valores NULL, ou que contenham valores únicos).função COUNT () retorna o número de linhas que corresponde a um determinado critério.valores NULL não serão contados

 

Tipo: Agregado.

 

Sintaxe:

 

COUNT ( * | ALL | Distinct )

 

Argumentos:

 

. * - Conta todas as linhas de uma tabela inclusive valores NULL;

. ALL - Conta somente os valores não NULL na coluna valor;

. Distinct - Conta todos os valores únicos e não NULL na coluna valor;

. valor - Coluna numérica ou expressão.

 

Exemplo:

 

Select COUNT(*) from clientes

 

O exemplo acima conta-rá todos os registros da tabela clientes e os retorna-rá em um campo o total de registros da tabela de clientes.

 

SELECT COUNT(column_name) FROM table_name

 

SELECT COUNT(*) FROM table_name

 

SELECT COUNT(DISTINCT column_name) FROM table_name

 

"SELECT Count(*) AS intTotal FROM Tabela WHERE nome = '"&varnome&"''"

Compartilhar este post


Link para o post
Compartilhar em outros sites

o 'p' e o 'c' são alias dos objetos das tabelas que estamos trabalhando. o select dentro do outro select é uma subquery que retorna, obrigatoriamente, uma coluna(no caso o Count) que fica relacionada diretamente através do Where, identificando que é pra contar todos os registros da tabela de alias 'c' quando os ids forem iguais ao da tabela de alias 'p'

Compartilhar este post


Link para o post
Compartilhar em outros sites
"SELECT Count(*) AS intTotal FROM Tabela WHERE nome = '"&varnome&"''" 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, boa tarde.

 

Assim, resolvi postar de outro jeito... pq ainda não consegui resolver...

 

O código abaixo está funcionando ok?

 

<%ComandoSQL5 = "SELECT distinct cics FROM log "
SET ObjRs5 = Server.CreateObject("ADODB.Recordset")
ObjRs5.Open ComandoSQL5,objConn,3,3%>

<%While Not objRS5.EOF %>

<%
ComandoSQL6 = "SELECT Count(cics) AS qtde FROM log WHERE cics = '"&objRS5("cics")&"' "
SET ObjRs6 = Server.CreateObject("ADODB.Recordset")
ObjRs6.Open ComandoSQL6,objConn,3,3

ComandoSQL7 = "SELECT id from cics where cics = '"&objRS5("cics")&"' "
SET ObjRs7 = Server.CreateObject("ADODB.Recordset")
ObjRs7.Open ComandoSQL7,objConn,3,3

ComandoSQL8 = "SELECT avatar from avatar where id = "&objRS7("id")&" "
SET ObjRs8 = Server.CreateObject("ADODB.Recordset")
ObjRs8.Open ComandoSQL8,objConn,3,3

response.write "avatar = " & objRS8("avatar") & "cics = " & objRS5("cics") &" cliques = "& ObjRs6("qtde") & "<BR>"
%>

<%objRS5.MoveNext
Wend
%>

O que eu preciso / quero?

 

Queria unificar essas quatro querys em uma só de forma que eu possa ordenar os resultados de acordo com a maior qtde para a menor... a qtde que preciso ordenar é a representada por essa variavel: ObjRs6("qtde")

 

Sacaram?

 

Será que rola mais uma forcinha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um OREDER BY campo Asc

 

ORDER BY nome_campo_para_estar_ordenando ASC

 

e a qtde você pode atraves de um code criar uma tabela com X colunas k representam o recordset ObjRs6("qtde")

Compartilhar este post


Link para o post
Compartilhar em outros sites

xanburzum, boa tarde e obrigado pelo retorno.

 

Como você pode observar nos meus scripts postados eu sei usar o order by e o select count. A minha dificuldade é um pouco mais específica.

 

Ou seja: como dar o order by no select count.

 

Certamente eu precisarei unificar as querys, coisa que eu tb sei fazer em uma situação normal.

 

O que eu não sei fazer é unificar as querys sendo que uma delas tem select count e a outra distinct... aí é que está a minha dificuldade, sacou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

unificar as querys sendo que uma delas tem select count e a outra distinct

você pode por exemplo atraves de uma tabela auxiliar , fazer a selecao das duas querys e gravar em uma temp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi... e é uma boa ideia... mas criariam registros desnecessários... e é uma consulta que será muito visualizada, pois fica na folha de rosto do site... ou seja, iria utilizar muito processamento desnecessário...

 

Dinamicamente será que é impossível?

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaunvc pode usar os operadores da SQL, em conjunto, AND ,OR, para poder fazer uma sql k atendam os criterios, dando um unionall depois acho k dá...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daí já não faço mais ideia de como fazer... foi além dos meus conhecimentos...

 

 

Se rolar um exemplo ou se desse pra fazer aí de lambuja ficaria muito grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.